我現在正在開發一個android項目,並且對如何在不同webview中執行回調有疑問。我也爲我的項目使用了JSInterface。在這裏我有2個網頁瀏覽。一個是索引頁,另一個是疊加層(儘管是一個html頁面)。我想要做的是如果任何用戶點擊疊加層上的某些鏈接,它應該觸發一個回寫函數,該函數寫在java文件中,索引頁通過JSInterface連接。這聽起來可能令人困惑,但我已經畫出了一些東西來幫助清楚!如何在webview中處理回調
謝謝!
我現在正在開發一個android項目,並且對如何在不同webview中執行回調有疑問。我也爲我的項目使用了JSInterface。在這裏我有2個網頁瀏覽。一個是索引頁,另一個是疊加層(儘管是一個html頁面)。我想要做的是如果任何用戶點擊疊加層上的某些鏈接,它應該觸發一個回寫函數,該函數寫在java文件中,索引頁通過JSInterface連接。這聽起來可能令人困惑,但我已經畫出了一些東西來幫助清楚!如何在webview中處理回調
謝謝!
對於您的功能鏈接,您可以使用自定義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();")
我希望我沒有理解錯的你的問題。這應該可以幫助你http://stackoverflow.com/questions/3765860/adding-javascript-interface-to-a-browser – 2011-12-28 19:00:37
如果第二個webview是爲了覆蓋第一個webview,那麼從一個體繫結構可能會更簡單從資源利用的角度來看更好,並在HTML中執行疊加並僅使用一個webview。 – Theo 2011-12-28 19:22:03