Flutter WebView js通道无法在Android设备上工作

dldeef67  于 2023-05-05  发布在  Android
关注(0)|答案(1)|浏览(399)

在我的Flutter项目中,我使用WebView进行3D安全处理。银行审核通过后,在webView中打开的页面用js发送一些json数据,我使用js通道功能获取这些数据。所有这些过程在ios设备上运行良好,我可以获取json数据。但是在android设备中,js通道无法捕获任何消息,或者可能是android设备限制了该页面上的js进程。我不知道:))
Flutter 3.7.7 ·通道稳定
我使用了两个版本的webview_flutter包:在3.0.4和4.2.0版本中没有解决这个问题。
我的示例代码如下:

late  final PlatformWebViewControllerCreationParams params;
     if (WebViewPlatform.instance is WebKitWebViewPlatform) {
       params = WebKitWebViewControllerCreationParams(
         allowsInlineMediaPlayback: true,
         mediaTypesRequiringUserAction: const <PlaybackMediaTypes>{},
      );
    } else {
      params = const PlatformWebViewControllerCreationParams();
    }

    final WebViewController controller = WebViewController.fromPlatformCreationParams(params);

    controller
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setBackgroundColor(const Color(0x00000000))
      ..loadHtmlString(html ?? "")
      ..addJavaScriptChannel(
        'Print',
        onMessageReceived: (JavaScriptMessage result) {
          final json = result.message.replaceAll('message: craftgateResponse,', '"message": "craftgateResponse",').replaceAll('value', '"value"');

          final data = jsonDecode(json) as Map<String, dynamic>;

          AppCore.pop(
            context: context,
            pop: CreditCardPaymentResponse.fromJson(data),
          );
        },
      );

    if (controller.platform is AndroidWebViewController) {
      AndroidWebViewController.enableDebugging(true);
      (controller.platform as AndroidWebViewController).setMediaPlaybackRequiresUserGesture(false);
    }`

你以前遇到过这个问题吗?有解决这个问题的办法吗?
从现在开始谢谢你们。

vecaoik1

vecaoik11#

对于将来遇到类似问题的人,请更新:在调试和发布模式下都遇到此错误。我找到了错误的原因,现在已经解决了。错误是由于网页上的js post行。'window.JsChannel.postMessage('sample json response','');这一行中的''部分阻止了android捕获消息,因为我不明白为什么,删除'*'部分解决了这个问题。

相关问题