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 简单筛选一下才好