Android WebView拦截.html链接跳转内部SecondActivity实现问题
你当前代码调用的是隐式Intent.ACTION_VIEW,系统会自动匹配默认处理HTTP/HTTPS协议的应用(通常是系统浏览器),因此无法跳转到应用内的SecondActivity。可以按以下方式调整:
第一步:修改MainActivity的WebView跳转拦截逻辑
将隐式Intent改为显式Intent,直接指定跳转目标为SecondActivity,同时将目标URL作为参数传递:
if (url.endsWith(".html")) { try { // 显式指定跳转目标 Intent intent = new Intent(view.getContext(), SecondActivity.class); // 传递待加载的HTML链接 intent.putExtra("HTML_LOAD_URL", url); view.getContext().startActivity(intent); } catch (Exception e) { e.printStackTrace(); } // 拦截WebView默认跳转逻辑 return true; }
第二步:在SecondActivity中接收URL并加载
在SecondActivity的onCreate生命周期中获取传入的URL,交给内置WebView加载:
public class SecondActivity extends AppCompatActivity { private WebView mSecondWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); mSecondWebView = findViewById(R.id.second_webview); // 配置WebView基础参数,和MainActivity的WebView配置保持一致即可 WebSettings settings = mSecondWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setDomStorageEnabled(true); // 接收并加载URL String loadUrl = getIntent().getStringExtra("HTML_LOAD_URL"); if (loadUrl != null) { mSecondWebView.loadUrl(loadUrl); } } // 可选:支持返回键回退WebView浏览历史 @Override public void onBackPressed() { if (mSecondWebView.canGoBack()) { mSecondWebView.goBack(); return; } super.onBackPressed(); } }
注意事项
- 确保SecondActivity已经在
AndroidManifest.xml中完成注册,否则会触发ActivityNotFoundException。 - 如果加载的HTML页面涉及JS交互、跨域访问或者本地资源引用,SecondActivity的WebView配置要和MainActivity保持一致,避免出现加载异常。
内容的提问来源于stack exchange,提问作者Jarosław Król
相关产品推荐
相关产品推荐

