zoukankan      html  css  js  c++  java
  • flutter webview_flutter 与JavaScript交互

    使用webview_flutter iOS需要在xcode工程中info.plist文件添加如果字典

    <key>io.flutter.embedded_views_preview</key>
    <string>YES</string>
    

    webview_flutter与交互
    1.通过拦截url的方式

          navigationDelegate: (NavigationRequest navigation) {
            String url = navigation.url;
    
            if (url.contains("micrpayclient://")) {
              //之前定义的micrpayclient保持不变
              String lStrig = 'micrpayclient://url=';
              int index = url.indexOf(lStrig);
              String subString = url.substring(index + lStrig.length);
              try {
                var dUrl = Uri.decodeComponent(subString);
                launch(dUrl);
              } catch (error) {
                print(error);
              }
              return NavigationDecision.prevent;
            }
            return NavigationDecision.navigate;
          },
    

    2.通过JavascriptChannel来实现

     WebView(
          initialUrl: widget.url,
          userAgent:
              "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36",
          navigationDelegate: listenWebview,
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (vc) {
            _controller = vc;
            print('webviewUrl = ${widget.url}');
          },
          onPageFinished: (String value) {
            print('webviewUrl = $value');
            _handleNaviData();
          },
          javascriptChannels: [
            JavascriptChannel(
            name: 'tudouApp',//handleName
            onMessageReceived: (JavascriptMessage message) {
              print(message.message);
              //接收到js返回的数据
              //自定义处理
            }),
            JavascriptChannel(
            name: 'JSHandle',//handleName
            onMessageReceived: (JavascriptMessage message) {
              print(message.message);
              //接收到js返回的数据
              //收到js返回并作出应答
             String callbackname = message.message; 
             String data = "收到消息调用了";
             String script = "$callbackname($data)";
             _controller.evaluateJavascript(script);
            }),
          ].toSet(),
        )
    
  • 相关阅读:
    $ [Contest #4]$求和 思博题
    洛谷$P1864 [NOI2009]$二叉查找树 区间$dp$
    洛谷$P4045 [JSOI2009]$密码 $dp$+$AC$自动机
    $bzoj2560$ 串珠子 容斥+$dp$
    洛谷$P1600$ 天天爱跑步 树上差分
    $loj526 [LibreOJ eta Round #4]$ 子集 图论
    $CF888G Xor-MST$ 最小生成树
    $bzoj4152 The Captain$ 最短路
    洛谷$P3645 [APIO2015]$雅加达的摩天楼 最短路
    $bzoj4722$ 由乃 搜索
  • 原文地址:https://www.cnblogs.com/qqcc1388/p/12633184.html
Copyright © 2011-2022 走看看