banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Android强制使用WebView不调用系统或外部浏览器

HTML5 混合 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 表示宿主应用程序希望离开当前 WebView 并自行处理 URL,否则返回 false。

/** 在当前 WebView 中加载新 URL 之前,给宿主应用程序一个机会接管控制权。
* 如果没有提供 WebViewClient,默认情况下 WebView 会要求 Activity Manager 为 URL 选择适当的处理程序。
* 如果提供了 WebViewClient,返回 true 表示宿主应用程序处理 URL,而返回 false 表示当前 WebView 处理 URL。
* 对于使用 POST 方法的请求,不会调用此方法。
@param view 发起回调的 WebView。
@param url 要加载的 URL。
@return True 表示宿主应用程序希望离开当前 WebView 并自行处理 URL,否则返回 false。
*/

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

需要注意一点问题,如果你的代码中有拨打电话(tel:),发送邮件 (mailto:) 的话,需要在实现代码时对 URL 进行简单筛选才好。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。