Android WebView点击网页超链接跳转Chrome而非内置加载的实现问题
Android WebView点击超链接跳转外部浏览器实现方案
核心修改逻辑
你当前代码中shouldOverrideUrlLoading返回false代表将URL交给WebView自身加载,只需修改该方法的逻辑,拦截用户点击的URL后跳转系统浏览器即可实现需求。
适配全版本的修改代码
import android.widget.Toast; import android.net.Uri; import android.content.Intent; public class MainActivity extends Activity { WebView wb; private class HelloWebViewClient extends WebViewClient { // 适配Android 7.0以下版本 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return handleUrlJump(url); } // 适配Android 7.0及以上版本 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return handleUrlJump(request.getUrl().toString()); } // 统一处理URL跳转逻辑 private boolean handleUrlJump(String url) { // 若需要保留本站点在WebView内加载,可放开下方注释的判断逻辑 // if (url.contains("example.com")) { // return false; // } Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); // 可选配置:指定跳转Chrome浏览器 // intent.setPackage("com.android.chrome"); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Toast.makeText(MainActivity.this, "未找到可打开链接的应用", Toast.LENGTH_SHORT).show(); } return true; } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wb=(WebView)findViewById(R.id.webView1); wb.getSettings().setJavaScriptEnabled(true); wb.getSettings().setLoadWithOverviewMode(true); wb.getSettings().setUseWideViewPort(true); wb.getSettings().setBuiltInZoomControls(true); wb.getSettings().setPluginState(WebSettings.PluginState.ON); wb.setWebViewClient(new HelloWebViewClient()); wb.loadUrl("https://example.com"); } }
逻辑说明
shouldOverrideUrlLoading返回true代表URL已经被开发者自行处理,WebView不会再加载该URL- 若需要指定跳转Chrome浏览器,可放开代码中
intent.setPackage("com.android.chrome")的注释,若用户未安装Chrome会自动 fallback 到系统默认浏览器 - 加入
resolveActivity判断是为了避免设备未安装浏览器应用时触发崩溃
内容的提问来源于stack exchange,提问作者user6473261
相关产品推荐
相关产品推荐

