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