Flutter WebView调试插件webkit_inspection_protocol的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter WebView调试插件webkit_inspection_protocol的使用

插件简介

webkit_inspection_protocol 包是 Chrome DevTools 协议(以前称为 Webkit Inspection Protocol)的客户端。它用于与基于 Chrome DevTools 的调试器进行通信。

更多关于协议的信息,请参阅 Chrome DevTools Protocol

注意: 这不是官方的 Google 产品。

使用方法

添加依赖

pubspec.yaml 文件中添加 webkit_inspection_protocol 依赖:

dependencies:
  webkit_inspection_protocol: ^0.1.0

然后运行 flutter pub get 来安装依赖。

示例代码

下面是一个完整的示例,展示如何在 Flutter 中使用 webkit_inspection_protocol 调试 WebView。

1. 创建一个简单的 WebView 应用

首先,创建一个新的 Flutter 项目,并确保你已经安装了 webview_flutterwebkit_inspection_protocol 两个包。

dependencies:
  flutter:
    sdk: flutter
  webview_flutter: ^4.0.0
  webkit_inspection_protocol: ^0.1.0

2. 编写主页面代码

接下来,在 lib/main.dart 中编写以下代码:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter WebView Debugging',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: WebViewPage(),
    );
  }
}

class WebViewPage extends StatefulWidget {
  @override
  _WebViewPageState createState() => _WebViewPageState();
}

class _WebViewPageState extends State<WebViewPage> {
  late WebViewController _controller;
  late WebKitInspectionProtocol _wip;

  @override
  void initState() {
    super.initState();
    if (WebView.platform == null && defaultTargetPlatform == TargetPlatform.android) {
      WebView.platform = SurfaceAndroidWebView();
    }

    // Initialize WebKitInspectionProtocol
    _wip = WebKitInspectionProtocol('ws://localhost:9222/devtools/page/ABCDEF');
    _wip.connect().then((_) {
      print('Connected to the debugger');
      _wip.onEvent.listen((event) {
        print('Received event: $event');
      });
    }).catchError((error) {
      print('Failed to connect to the debugger: $error');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebView Debugging'),
      ),
      body: WebView(
        initialUrl: 'https://flutter.dev',
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller = webViewController;
        },
      ),
    );
  }

  @override
  void dispose() {
    _wip.disconnect();
    super.dispose();
  }
}

解释

  • 初始化 WebView:我们使用 webview_flutter 包来创建一个 WebView,并加载一个网页。
  • 连接调试协议:通过 WebKitInspectionProtocol 类连接到 Chrome DevTools 协议的 WebSocket 端点。你需要将 ws://localhost:9222/devtools/page/ABCDEF 替换为实际的 WebSocket URL。
  • 监听事件:连接成功后,我们可以监听来自浏览器的事件并打印出来。
  • 清理资源:在页面销毁时断开与调试协议的连接。

注意事项

  • 确保你的设备或模拟器上已经启用了 Chrome 浏览器的远程调试功能。
  • WebSocket URL 可以通过启动 Chrome 并访问 chrome://inspect 获取。
  • 如果你在真机上测试,请确保设备和电脑在同一网络下,并且 WebSocket URL 是可访问的。

通过以上步骤,你就可以在 Flutter 应用中使用 webkit_inspection_protocol 来调试 WebView 了。希望这个示例能帮助你更好地理解和使用这个插件。


更多关于Flutter WebView调试插件webkit_inspection_protocol的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter WebView调试插件webkit_inspection_protocol的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中,使用webkit_inspection_protocol插件可以帮助你调试嵌入的WebView内容。这个插件允许你通过Chrome DevTools来检查和调试WebView中的网页。以下是一个基本的代码案例,展示了如何在Flutter应用中集成并使用webkit_inspection_protocol

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加webkit_inspection_protocolwebview_flutter的依赖:

dependencies:
  flutter:
    sdk: flutter
  webview_flutter: ^3.0.4  # 确保使用最新版本
  webkit_inspection_protocol: ^0.7.5  # 确保使用最新版本

2. 导入包

在你的Dart文件中导入必要的包:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';

3. 初始化WebView和调试服务器

创建一个Flutter应用,并设置WebView和调试服务器:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('WebView Debugging Example'),
        ),
        body: WebViewDebuggingExample(),
      ),
    );
  }
}

class WebViewDebuggingExample extends StatefulWidget {
  @override
  _WebViewDebuggingExampleState createState() => _WebViewDebuggingExampleState();
}

class _WebViewDebuggingExampleState extends State<WebViewDebuggingExample> {
  late WebViewController _controller;
  late WebKitInspectionProtocol _webkitInspectionProtocol;

  @override
  void initState() {
    super.initState();
    _initWebView();
  }

  Future<void> _initWebView() async {
    _webkitInspectionProtocol = await WebKitInspectionProtocol.startServer();
    _webkitInspectionProtocol.onDebugPortReady.listen((int port) {
      print('WebView debugging is available on port $port');
      // 在这里你可以打开一个浏览器窗口并访问 `chrome://inspect#devices` 来连接调试
    });

    _controller = WebViewController()
      ..loadUrl('https://flutter.dev');
  }

  @override
  Widget build(BuildContext context) {
    return WebView(
      initialUrl: 'about:blank',
      javascriptMode: JavascriptMode.unrestricted,
      onWebViewCreated: (WebViewController webViewController) {
        _controller = webViewController;
        if (_controller.complete) {
          _controller.loadUrl('https://flutter.dev');
        }
      },
      onPageFinished: (String url) {
        // 页面加载完成后,你可以在这里执行其他操作
      },
    );
  }

  @override
  void dispose() {
    _webkitInspectionProtocol.stopServer();
    super.dispose();
  }
}

4. 启动并调试

运行你的Flutter应用。当WebView加载完成后,你应该会在控制台看到类似“WebView debugging is available on port XXXX”的消息。

打开Chrome浏览器,访问chrome://inspect#devices,你应该能够看到你的设备以及正在运行的WebView实例。点击“inspect”链接,你就可以使用Chrome DevTools来调试WebView中的内容了。

注意事项

  • 确保你的设备或模拟器已经开启了开发者模式,并且允许USB调试。
  • 某些情况下,你可能需要在设备的设置中启用“WebView实现”的调试选项(这取决于设备和Android版本)。
  • 如果你使用的是iOS,调试过程可能会有所不同,具体请参考webkit_inspection_protocol的文档。

这个代码案例提供了一个基本框架,你可以根据自己的需求进行扩展和修改。

回到顶部