Android开发中WebView加载在线HTML点击链接跳转浏览器如何解决
Android WebView内部加载链接解决方案
核心原因
WebView默认未配置自定义WebViewClient时,页面内的跳转请求会被系统以Intent形式分发,优先使用系统浏览器打开,只需添加WebViewClient配置即可解决。
必须修改的代码项
- 给WebView设置自定义
WebViewClient实例,重写shouldOverrideUrlLoading方法接管页面跳转逻辑 - 修正加载地址的协议头,在线地址必须加
http://或https://前缀,否则会加载失败 - 可选优化:重写Activity的返回逻辑,支持WebView页面栈回退
- 必须在
AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
修改后完整代码
public class ContainerActivity extends Activity { private WebView mWebView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contain); mWebView = (WebView)findViewById(R.id.wvPortal); WebSettings mWebSettings = mWebView.getSettings(); mWebSettings.setJavaScriptEnabled(true); // 核心配置:设置WebViewClient接管跳转逻辑 mWebView.setWebViewClient(new WebViewClient() { // 兼容Android 7.0以下版本 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } // 兼容Android 7.0及以上版本 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }); // 注意地址补全http/https协议头 mWebView.loadUrl("https://www.domain.com/path/to/index.html"); } // 可选优化:按返回键先退回WebView上一页,没有历史再退出页面 @Override public void onBackPressed() { if (mWebView.canGoBack()) { mWebView.goBack(); return; } super.onBackPressed(); } }
内容的提问来源于stack exchange,提问作者Dark Web
相关产品推荐
相关产品推荐

