写点什么

Flutter Webview 添加 Cookie 的正确姿势

用户头像
小呆呆666
关注
发布于: 4 小时前

场景

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,搞定

发布于: 4 小时前阅读数: 6
用户头像

小呆呆666

关注

2021,葬爱不在低调 2020.08.17 加入

还未添加个人简介

评论

发布
暂无评论
Flutter Webview添加Cookie的正确姿势