在我的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);
}`
你以前遇到过这个问题吗?有解决这个问题的办法吗?
从现在开始谢谢你们。
1条答案
按热度按时间vecaoik11#
对于将来遇到类似问题的人,请更新:在调试和发布模式下都遇到此错误。我找到了错误的原因,现在已经解决了。错误是由于网页上的js post行。'window.JsChannel.postMessage('sample json response','');这一行中的''部分阻止了android捕获消息,因为我不明白为什么,删除'*'部分解决了这个问题。