2011-12-28 56 views
3

我現在正在開發一個android項目,並且對如何在不同webview中執行回調有疑問。我也爲我的項目使用了JSInterface。在這裏我有2個網頁瀏覽。一個是索引頁,另一個是疊加層(儘管是一個html頁面)。我想要做的是如果任何用戶點擊疊加層上的某些鏈接,它應該觸發一個回寫函數,該函數寫在java文件中,索引頁通過JSInterface連接。這聽起來可能令人困惑,但我已經畫出了一些東西來幫助清楚!如何在webview中處理回調

謝謝! enter image description here

+0

我希望我沒有理解錯的你的問題。這應該可以幫助你http://stackoverflow.com/questions/3765860/adding-javascript-interface-to-a-browser – 2011-12-28 19:00:37

+0

如果第二個webview是爲了覆蓋第一個webview,那麼從一個體繫結構可能會更簡單從資源利用的角度來看更好,並在HTML中執行疊加並僅使用一個webview。 – Theo 2011-12-28 19:22:03

回答

8

對於您的功能鏈接,您可以使用自定義URL方案,如myurl://函數。然後爲WebView的shouldOverrideUrlLoading事件編寫一個事件處理程序,在該事件中您決定如何處理該URL:或者指示web視圖加載它,或者執行一些自定義操作。

@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; 
} 

我用startsWith查詢的網址爲這個快速和骯髒的例子,但你應該考慮使用android.net.Uri.parse用於解析URL。

這應該允許您調用Java函數foo()而不必通過第一個WebView。

如果你想通過第一web視圖,那麼你可以呼籲JSInterface這樣的功能(其中webView1是第一的WebView通過findViewById檢索):

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

感謝您的及時迴應。我仍然感到困惑的是,對於第二個webview,我沒有JSInterface,反正我可以將它傳遞給webview1,並使用已經在那裏實現的JSInterface? – sammiwei 2011-12-28 19:38:22

+0

使用JSInterface調用幫助更新了響應嗎? – Theo 2011-12-30 02:40:14

+0

它肯定有幫助,findViewById是我在找的東西。非常感謝您的詳細解釋! – sammiwei 2012-01-03 18:00:44