flutter webview插件,拦截不到非用户点击跳转的URL

webview 插件,onNavigationRequest 方法在使用时候发现拦截不到非用户点击跳转的URL发现是原生代码里加了-个reguest.isRequestGesture()的判断 如果直接去掉,页面初始加载的URL会循环加载。

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

​可以考虑以下几种方法来解决这个问题:

方法一:修改原生代码

可以尝试修改 shouldOverrideUrlLoading 方法来处理所有导航请求,而不仅仅是用户手势触发的请求:​

override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { 
  // 注释掉 isRequestGesture 的判断 
  // if (this.returnValueForShouldOverrideUrlLoading && request.isRequestGesture()) { 
  if (this.returnValueForShouldOverrideUrlLoading) { 
    this.flutterApi.requestLoadingImpl(this, view, request, this.emptyReply) 
    return true 
  } 
  return false 
}

​方法二:在 Flutter 端处理 URL 拦截。

可以在 Flutter 端通过 onNavigationRequest 处理 URL 拦截。确保在 WebView 配置中正确设置了 navigationDelegate,并在 navigationDelegate 中拦截所有导航请求。​

WebView( 
  initialUrl: 'https://example.com', 
navigationDelegate: (NavigationRequest request) { 
  // 在此处理所有导航请求 
  if (shouldOverrideUrlLoading(request.url)) { 
    // 拦截并处理导航请求 
    return NavigationDecision.prevent; 
  } 
  return NavigationDecision.navigate; 
}, 
)

可以定义一个辅助方法来决定是否拦截某个 URL:

bool shouldOverrideUrlLoading(String url) { 
  // 在这里添加逻辑,判断是否需要拦截某个 URL 
  // 比如你可以检查 URL 的模式、域名、路径等 
  if (url.contains('example.com/special-path')) { 
    // 拦截并处理这个 URL 
    return true; 
  } 
  return false; 
}

​方法三:处理循环加载问题。

如果直接去掉 request.isRequestGesture() 导致页面初始加载的 URL 循环加载,可以通过在 onPageStarted 或 onPageFinished 回调中添加额外的逻辑,避免这种情况。​

WebView( 
  initialUrl: 'https://example.com', 
onPageStarted: (String url) { 
  // 页面开始加载时的处理 
  if (url == 'https://example.com') { 
    // 如果是初始加载的 URL,做一些处理以避免循环加载 
  } 
}, 
onPageFinished: (String url) { 
  // 页面加载完成时的处理 
  if (url == 'https://example.com') { 
    // 如果是初始加载的 URL,做一些处理以避免循环加载 
  } 
}, 
navigationDelegate: (NavigationRequest request) { 
  // 在此处理所有导航请求 
  if (shouldOverrideUrlLoading(request.url)) { 
    return NavigationDecision.prevent; 
  } 
  return NavigationDecision.navigate; 
}, 
)

目前推荐通过以上方式规避。

分享
微博
QQ
微信
回复
2天前
相关问题
Web拦截不到vuerouter跳转
1465浏览 • 0回复 待解决
Flutter如何调用本地插件
279浏览 • 1回复 待解决
flutter_sound 插件引用问题
258浏览 • 1回复 待解决
通过webView修改iframeURL
815浏览 • 1回复 待解决
WebView goBack事件拦截
946浏览 • 1回复 待解决
webview拦截返回按钮。
722浏览 • 1回复 待解决
Slider拦截点击事件失败
193浏览 • 1回复 待解决
HarmonyOS WebView拦截网络请求
303浏览 • 1回复 待解决
用户相册, 获取不到albumName
1685浏览 • 1回复 待解决
富文本扩展点击监听返回url
739浏览 • 1回复 待解决
webview如何实现网络请求拦截功能
2085浏览 • 1回复 待解决
webview中如何拦截网络请求
493浏览 • 1回复 待解决
鸿蒙Webview加载Url,alipay无法返回
9104浏览 • 1回复 待解决