4

メインアクティビティで次のコードを使用していますが、関数 display() を与えることは定義されていません

public class cordovaExample extends DroidGap {
    Context mcontext;
    private novel n;
    private Server s;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new Thread(new Server(this)).start();
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) { }
        new Thread(new Client()).start();

        super.init();

        n = new novel(this, appView); 
        s = new Server(this,appView);

        appView.getSettings().setJavaScriptEnabled(true);
        appView.addJavascriptInterface(n, "novel");
        appView.addJavascriptInterface(s, "Server");

        super.loadUrl("file:///android_asset/www/index.html");
        super.loadUrl("javascript:display()");
    }
}

最後の行で、エラー display() が定義されていません

function display() {
    alert("abc");
}

上記のコードは、htmlファイルで使用している表示機能を示しています

あらゆる種類のヘルプをいただければ幸いです

4

2 に答える 2

6

Cordova がページの読み込み時に JavaScript を読み込むようにするのは悪い考えです。これは、ローカルの JavaScript で処理する必要があります。HTML ページ自体で次のように display() 関数を呼び出してみてください。

<script>
    function display()
    {


        alert("abc");


    }

    window.onload = function() {
        display();
    }
</script>

後で Cordova 内から JavaScript を呼び出す必要がある場合は、次の方法で行うことができます。

sendJavascript("display();");

他のクラスからこのメソッドにアクセスするには、メイン アクティビティにアクセスする必要があります。簡単ですがおそらく安全ではない方法は、アクティビティ自体を保持するメインのアクティビティに静的変数を作成することです。例:

public class MyActivity extends DroidGap {
    public static MyActivity activity;

    public void onCreate(Bundle savedInstanceState) {
        activity = this;
    }
}

次に、クラスのどこからでも、次の操作を行います。

MyActivity.activity.sendJavascript('display();');
于 2012-09-20T13:54:05.697 に答える
1

Cordova 2.6 からは、CordovaActivity (DroidGap) で onMessage をオーバーライドできます。メッセージ「onPageFinished」を取得する必要があります。その後、ドキュメントで宣言された任意の関数を呼び出すことができます。

@Override
public Object onMessage(String id, Object data) {
    if("onPageFinished".equals(id)) {
        sendJavascript("display('abc');");
    }
    return super.onMessage(id, data);
}

そしてHTMLで:

<script>
    function display(arg) {
        alert(arg);
    }
</script>

その他のオプションは、CordovaActivity の onResume() 関数で呼び出すことです。

@Override
public void onResume() {
    super.onResume();
    sendJavascript("display('abc');");
}
于 2014-05-25T04:53:50.087 に答える