Flutter中PlatformView嵌入网页时点击链接无法跳转怎么办?

♫玉翠 阅读 21

我在用Flutter的AndroidPlatformView嵌入WebView显示网页,但点击页面里的链接完全没反应。网页内容能正常加载,就是所有超链接都无效。

尝试过在WebView初始化时启用JavaScript,也检查了shouldOverrideUrlLoading方法,但点击链接时断点调试发现回调根本没触发。网页代码是这样的:


<a href="https://example.com" rel="external nofollow"  target="_blank">测试链接</a>
<script>
  document.querySelector('a').addEventListener('click', () => {
    console.log('点击了链接');
  });
</script>

试过各种方法都没解决,实在搞不懂哪里出问题了…

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
司马秀兰
这个问题其实跟Flutter的PlatformView没关系,主要是WebView的配置问题。你需要在Android原生端处理这个事情,用WordPress开发时我们也经常遇到类似的情况。

在你的Flutter项目里找到android文件夹,打开MainActivity.java或者MainActivity.kt,找到你WebView的初始化代码,在里面加上这么一段:

webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.startsWith("http://") || url.startsWith("https://")) {
view.loadUrl(url);
return true;
}
return false;
}
});


另外别忘了在AndroidManifest.xml里加上网络权限,虽然这题跟权限没关系,但很多人经常漏了这个:

<uses-permission android:name="android.permission.INTERNET" />

还有个坑要注意,你那个target="_blank"在WebView里是不生效的,移动端WebView不支持这种写法。建议把HTML改成普通链接:

<a href="https://example.com">测试链接</a>

最后吐槽一句,WebView这玩意儿真是坑多,光靠前端代码解决不了问题,必须得在原生端处理。我在开发WordPress插件时也经常遇到类似的兼容性问题,移动端和PC端就是不一样啊。
点赞 1
2026-02-15 14:12
开发者熙苒
改成这样,在Android端的WebView设置里加上这句:webView.getSettings().setSupportMultipleWindows(true); 同时确保你没有拦截window.open之类的弹窗行为,target="_blank"的链接需要多窗口支持才能跳转。
点赞 5
2026-02-08 22:08