1

JSInterfaceを持つWebビューを取得しました:

mWebView.addJavascriptInterface(new JSInterfacelistArticle(mWebView, this, website), "interfaceWebsite");

javascript関数を使用してインターフェイスから関数を呼び出す場合:

window.interfaceWebsite.doToast(info);

最初は正常に動作していますが、アクティビティがfinish()した後、これに戻ると、次のエラーが発生しました。

E/Web Console(28654): Uncaught TypeError: Cannot call method 'doToast' of undefined at :1

アクティビティを2回開始したときに、インターフェイスが機能しないのはなぜですか?

編集:ウィンドウを削除した場合。関数を呼び出すと、次のようになります。

Uncaught ReferenceError: interfaceWebsite is not defined at :1

したがって、2回目の読み込み時にインターフェイスに問題があると確信しています...

ありがとう

4

2 に答える 2

0

webview の loadurl 関数を上書きしました:

mWebView.setWebViewClient(new WebViewClient() {
               @Override
               public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
                   loadingFinished = false;
                   mWebView.loadUrl(urlNewString);
                   return true;
               }

               @Override
               public void onPageFinished(WebView view, String url) {
                   super.onPageFinished(view, url);
                   loadingFinished = true;
                }
            });

以前は、loadingFinished を静的変数に設定する必要がありましたが、アクティビティの新しいインスタンスを作成するときに var が更新されないことを忘れていました。loadingFinished を false に設定するだけです。

今、私のスレッドは私のウェブビューがウェブサイトを完全にロードするまで待ちます

ええ、かなり愚かです。

于 2012-05-03T15:35:09.400 に答える
-2

スクリプトの最初に、次を追加します。

while(typeof JSInterface === "undefined"){  }

これは JSInterface が読み込まれるのを「待機」しますが、完全ではありませんが、非常にうまく機能します

于 2013-11-24T22:12:30.673 に答える