2011-12-28 39 views
3

私は今アンドロイドプロジェクトに取り組んでおり、さまざまなWebビューでコールバックを行う方法について質問があります。私は自分のプロジェクトにもJSInterfaceを使用しました。ここに私は2つのwebviewsがあります。 1つはインデックスページを持ち、もう1つはオーバーレイです(まだHTMLページです)。私がしたいことは、オーバーレイのいくつかのリンクをユーザーがクリックすると、Javaファイルに書かれたコールバック関数を呼び出す必要があります。インデックスページはJSInterfaceを介して接続されていました。混乱するかもしれませんが、明確にするために何かを描いています!webviewでコールバックを処理する方法

ありがとうございます! enter image description here

+0

私は私が間違って理解していない願っていますあなたの質問。これはあなたを助けるはずですhttp://stackoverflow.com/questions/3765860/adding-javascript-interface-to-a-browser –

+0

2番目のwebviewが最初のwebviewへのオーバーレイであることを意図しているなら、それはアーキテクチャからもっと簡単かもしれませんHTMLでオーバーレイを実行して1つのWebビューのみを使用するというリソース利用の観点から見て、より優れています。 – Theo

答えて

8

機能リンクには、myurl:// functionのようなカスタムURLスキームを使用できます。 URLを処理する方法を決定するWebViewのshouldOverrideUrlLoadingイベントのイベントハンドラを記述します.WebViewにロードするよう指示するか、カスタムアクションを実行します。

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) 
{ 
    if (url.startsWith("myurl://")) 
    { 
     // Parse further to extract function and do custom action 
    } 
    else 
    { 
     // Load the page via the webview 
     view.loadUrl(url); 
    } 
    return true; 
} 

私はこの迅速かつ汚い例えばURLをチェックするためのstartsWithを使用していますが、URLを解析するためandroid.net.Uri.parseを使用することを検討すべきです。

これにより、最初のWebViewを経由することなく、Java関数foo()を呼び出すことができます。

あなたが最初のWebViewを通過する場合は、あなたがこのようなJSInterface上の関数を呼び出すことができます(webView1が最初のWebViewでfindViewByIdによって取得):

webView1.loadUrl("javascript:myjsinterface.myjsfunc();") 
+0

あなたの迅速な対応に感謝します。私がまだ混乱しているのは、2番目のwebviewのためにJSInterfaceを持っていなかったことです。それはwebview1に戻して、そこにすでに実装されているJSInterfaceを利用できますか? – sammiwei

+0

JSInterfaceコールのヘルプで更新された応答はありましたか? – Theo

+0

それは間違いなく助けて、findViewByIdが私が探していたものです。詳細な説明をありがとうございました! – sammiwei

関連する問題