zoukankan      html  css  js  c++  java
  • Flutter Webview添加Cookie的正确姿势

    场景

    h5页面要从cookie里面取数据,所以需要在flutter webview的cookie里面塞一些数据,设置的数据多达十几条;按照网上查的使用方式来设置,通过fiddler抓包发现,只能生效一条,来来回回试了很多次都只有一条,心态崩了

    后来看到cookie设置数据也是类似键值对里面套键值对,灵机一动,变换下后就成功了,记录下正确的写法吧

    正确姿势

    引入

    • 使用的是flutter官方维护的webview插件
    webview_flutter: ^0.3.22+1
    

    错误示例

    • 这是最坑的一个,widget都都没写全,就写了俩个回调,这么写只会生效一条
    WebViewController _controller;
    onWebViewCreated: (WebViewController wvc) {
    	_controller = wvc;
    }
    
    onPageFinished: (String value) {
    	_controller.evaluateJavascript( 'document.cookie = "SESSIONID=612bc4822b6996d6f335a963c20eb541fba72985; path=/"')
    }
    
    • 这个只写了一条cookie,这个是没问题的,和上面的区别就是,这个使用双引号包住单引号,只写了一条的使用也是让人肝痛
    setSessionID() async {
      String sessionID = await LocalStorage.get("sessionID");
      if (Platform.isIOS) {
        _controller.evaluateJavascript("document.cookie = 'sessionID=${sessionID}'").then<String>((res) {
          print("webViewController.evaluateJavascript========>${res}");
          _onListCookies(_controller, context);
        });
      } else {
        _controller.evaluateJavascript('document.cookie = "sessionID=${sessionID};"').then<String>((res) {
          print("webViewController.evaluateJavascript========>${res}");
          _onListCookies(_controller, context);
        });
      }
    }
    

    多条cookie添加正确写法

    • 琢磨半天试出来的正确写法,cookie的设置需要在页面加载完之后设置
    ///webview控制器
    WebViewController _controller;
    String _url = "写入你的链接";
    
    WebView(
        initialUrl: _url,
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (controller) {
            _controller = controller;
        },
        onPageFinished: (url) {
            //页面加载结束
    		String cookie =
                "document.cookie = 'name=IAmDaShuaiBi';document.cookie = 'id=233'";
            _controller.evaluateJavascript(cookie);
        },
        userAgent: "test;app/1.0.0",
    )
    
    • 最重要的变化就是每条cookie都要用document.cookie作为key,这是最最最关键的

    优化写法

    • 上面的写法是写成一行,写成一行是很致命的操作,让赋值操作会变得很迷惑,优化下
    ///webview控制器
    WebViewController _controller;
    String _url = "写入你的链接";
    
    WebView(
        initialUrl: _url,
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (controller) {
            _controller = controller;
        },
        onPageFinished: (url) {
            //页面加载结束
            String cookie = '''
              document.cookie = 'nameOne=IAmDaShuaiBi';
              document.cookie = 'idOne=233';
              document.cookie = 'nameTwo=IAmDaShuaiBi';
              document.cookie = 'idTwo=233';
              document.cookie = 'nameThree=IAmDaShuaiBi';
              document.cookie = 'idThree=233';
            ''';
            _controller.evaluateJavascript(cookie);
        },
        userAgent: "test;app/1.0.0",
    )
    

    最后

    • ok,搞定
  • 相关阅读:
    今天上传公司服务器出现的.net framework版本错误问题
    浮动后父容器高度自适应
    asp net 编程问题 实现下一篇 和上一篇效果
    注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内
    SqlDbHelper备份,做项目时方便应用(目前不太全,把自己项目中的逐渐转移过来)
    域名状态,域名查询看是否被注册
    关于403 由于扩展配置问题而无法提供您请求的页面的问题
    让qq图标在自己的网站上显示方法
    Tomcat基于虚拟路径的发布和web.xml配置
    Tomcat虚拟目录配置方法及原理
  • 原文地址:https://www.cnblogs.com/xdd666/p/13803235.html
Copyright © 2011-2022 走看看