flutter_webview如何监听网页中的每一个请求
在Flutter的WebView中,如何监听网页发出的所有网络请求?我正在使用flutter_webview插件,但找不到相关方法捕获页面内的AJAX请求、资源加载等HTTP/HTTPS请求。需要实现类似WebViewClient.shouldInterceptRequest的功能,用于记录和分析页面请求。请问有什么解决方案或替代方案?
        
          2 回复
        
      
      
        使用 flutter_inappwebview 插件,在 onLoadResource 回调中监听每个请求。示例代码:
InAppWebView(
  onLoadResource: (resource) {
    print("URL: ${resource.url}");
  },
)
更多关于flutter_webview如何监听网页中的每一个请求的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 的 webview_flutter 插件中,可以通过 WebViewController 的 setNavigationDelegate 方法来监听网页中的每一个请求。具体步骤如下:
- 创建 WebViewController:在 
initState中初始化控制器。 - 设置 NavigationDelegate:使用 
setNavigationDelegate并实现onNavigationRequest回调,该回调会在每次请求时触发。 - 处理请求:在回调中检查请求 URL,决定是否允许加载。
 
示例代码:
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class MyWebView extends StatefulWidget {
  @override
  _MyWebViewState createState() => _MyWebViewState();
}
class _MyWebViewState extends State<MyWebView> {
  late final WebViewController _controller;
  @override
  void initState() {
    super.initState();
    _controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setNavigationDelegate(NavigationDelegate(
        onNavigationRequest: (NavigationRequest request) {
          // 打印或处理每一个请求的 URL
          print('请求 URL: ${request.url}');
          
          // 允许所有请求继续加载
          return NavigationDecision.navigate;
          
          // 如需阻止特定请求,可添加条件判断:
          // if (request.url.contains('blocked.com')) {
          //   return NavigationDecision.prevent;
          // }
        },
      ))
      ..loadRequest(Uri.parse('https://example.com'));
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('WebView 示例')),
      body: WebViewWidget(controller: _controller),
    );
  }
}
关键点说明:
onNavigationRequest在每次发起请求(包括页面跳转、资源加载)时触发。- 返回 
NavigationDecision.navigate允许请求,返回NavigationDecision.prevent阻止请求。 - 此方法适用于监听和过滤请求,但无法直接获取请求的详细头部或响应数据。
 
如需更深入的网络请求监控(如捕获响应内容),可能需要结合其他方法或插件,例如使用 webview_flutter 的 onPageStarted 和 onPageFinished 辅助监听页面状态。
        
      
            
            
            
