Android強制使用WebView不呼叫系統或外部瀏覽器

CG李大仁發表於2016-08-16
HTML5 HYBIRD混合APP需要在H5頁面中開啟第三方網站(例如:百度),android預設不在當前WebView中開啟,反而會呼叫系統或外部瀏覽器,解決辦法是自己重寫WebViewClient,覆蓋shouldOverrideUrlLoading並讓其返回True。

實現程式碼

mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
// webview自己載入URL,讓後通知系統不需要HandleURL
view.loadUrl(url);
return true;
}
});




原因可以從Android原始碼中可知,True if the host application wants to leave the current WebView and handle the url itself, otherwise return false。



/** Give the host application a chance to take over the control when a new url is about to be loaded
* in the current WebView. If WebViewClient is not provided, by default WebView will ask Activity
* Manager to choose the proper handler for the url. If WebViewClient is provided, return true means
* the host application handles the url, while return false means the current WebView handles the url.
* This method is not called for requests using the POST "method".
@param view The WebView that is initiating the callback.
@param url The url to be loaded.
@return True if the host application wants to leave the current WebView and handle the url itself, otherwise return false.
*/

public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}


需要注意一點問題,如果你的程式碼中有撥打電話(tel:),傳送郵件(mailto:)的話,需要在實現程式碼時對URL簡單篩選一下才好



--------------------------------------------------------------------------------------

- 版權宣告:

- 如在本頁面內無特別說明,本文內容均為[李大仁部落格]原創,本文版權歸[李大仁部落格]所有。

- 歡迎轉載,轉載請務必在文章頁面明顯位置提供原文連結並註明出處。歡迎您在轉載本文時保留本段宣告。

- 文章標題:Android強制使用WebView不呼叫系統或外部瀏覽器

- 獨立部落格:李大仁部落格

- 永久連結:http://www.lidaren.com/archives/1583

--------------------------------------------------------------------------------------

以上內容由部落格自動釋出工具自動釋出,最終顯示內容和效果會與原文內容有所偏差,敬請諒解。




相關文章