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

__EOF__

本文作者小呆呆
本文链接https://www.cnblogs.com/xdd666/p/13803235.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   xdd666  阅读(1380)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示