Flutter Webview Apple Pay

时间:2020-08-21 21:15:56

标签: ios flutter dart uiwebview wkwebview

尝试使用WebViewController.evaluateJavascript('myjs')时,在调试控制台中收到此错误。

[VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: PlatformException(evaluateJavaScript_failed, Failed evaluating JavaScript, JavaScript string was: 'doucment.getElementById("checkout_email").value = "Hell0";'
Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=0, WKJavaScriptExceptionMessage=Unable to run user agent scripts because this document has previously accessed Apple Pay. Documents can be prevented from accessing Apple Pay by adding a WKUserScript to the WKWebView's WKUserContentController., WKJavaScriptExceptionColumnNumber=0, NSLocalizedDescription=A JavaScript exception occurred})
#0      StandardMethodCodec.decodeEnvelope 
package:flutter/…/services/message_codecs.dart:572
#1      MethodChannel._invokeMethod 
package:flutter/…/services/platform_channel.dart:161
<asynchronous suspension>
#2      MethodChannel.invokeMethod 
package:flutter/…/services/platform_channel.dart:334
#3      MethodChannelWebViewPlatform<…>

我的Dart文件看起来像这样, 在页面加载时,我做一个简单的检查以确保我在正确的页面上执行js。如果检查通过,则执行js,但不幸的是返回上述错误。香港专业教育学院试图寻找整个谷歌的答案,但我发现与我遇到的问题没有任何相似之处。

  final Completer<WebViewController> _controller =
      Completer<WebViewController>();

  TextEditingController _searchQueryController = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return SafeArea(
        child: Scaffold(
      appBar: AppBar(
        elevation: 0,
        title: _searchBar(),
        leading: _directionButton('backward'),
        actions: [_directionButton('forward')],
      ),
      body: WebView(
        initialUrl: 'https://google.com',
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (WebViewController webViewController) {
          _controller.complete(webViewController);
        },
        onPageStarted: (url) {
          _searchQueryController.text = url;
        },
        onPageFinished: (url) async {
          print('Page Finished: ' + url);
          final controller = await _controller.future;
          if (url.contains('checkouts')) {
            await controller.evaluateJavascript('doucment.getElementById("checkout_email").value = "Hello";');
          }
        },
      ),
    ));
  }

1 个答案:

答案 0 :(得分:-1)

尝试将其添加到您的info.plist,替换您的付款网关域

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>yourdomain.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

别忘了重新安装应用程序