2012-01-05 3 views

答えて

2

私はあなたがまだここで説明する2 webviewsを扱っていると仮定します。 How to handle callbacks in webview

あなたはJavaScriptのインターフェイスが接続されているWebViewのかを判断することはできません。いくつかの準備を前もって行うことなく。いくつかのオプションがあります:

  1. は、それぞれのWebViewに異なるインタフェース名を使用して、1はあなたがしているどのWebViewを決定するために存在しているテスト

  2. 同じインターフェイスを使用しますが、各機能を持っています。呼び出し元のwebviewの番号を持つcallerというパラメータが含まれています。

+0

が、私は単一のWebViewに一つのインタフェースよりも多くを追加することができます。私は打撃としてWebChromeClient

"TypeError: Result of expression 'window.innerJS2' [undefined] is not an object."'' 

そのソースコードに言われますか? JSInterfaceに渡されたコンテキスト(アクティビティのスーパークラス)は、webviewのIDが必要なので、おそらくwebviewを取得するのに十分ではないことがわかりました。 – sammiwei

+1

名前が異なる限り、WebViewに必要な数のインターフェイスを追加できます(たとえば、addJavaScriptInterfaceの2番目のパラメータは異なる必要があります)。 – Theo

+0

よろしいですか。ありがとう!前にも触れましたが、私はコールバックにwebview.loadUrl( "javascript:")を使用できます。その例はありますか? – sammiwei

0

「あなたはWebViewしたいとあなたは(addJavaScriptInterfaceに例えば二paramは異なっていなければならない)限り、彼らは別の名前を持っている限り多くのインターフェイスを追加することができます。」

私はそうは思わなかった。私は2番目のインターフェイスを呼び出そうとします。

webView = (WebView) this.findViewById(R.id.webView1); 

    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new MyWebViewClient()); 
    webView.setWebChromeClient(new MyWebChromeClient()); 

    webView.loadUrl("http://www.google.com"); 
    webView.addJavascriptInterface(innerJavascript, "innerJS"); 
    webView.loadUrl("javascript:window.innerJS.description();"); 
    webView.addJavascriptInterface(innerJavascript2, "innerJS2"); 
    webView.loadUrl("javascript:window.innerJS2.description();");