場(chǎng)景
h5頁面要從cookie里面取數(shù)據(jù),所以需要在flutter webview的cookie里面塞一些數(shù)據(jù),設(shè)置的數(shù)據(jù)多達(dá)十幾條;按照網(wǎng)上查的使用方式來設(shè)置,通過fiddler抓包發(fā)現(xiàn),只能生效一條,來來回回試了很多次都只有一條,心態(tài)崩了
后來看到cookie設(shè)置數(shù)據(jù)也是類似鍵值對(duì)里面套鍵值對(duì),靈機(jī)一動(dòng),變換下后就成功了,記錄下正確的寫法吧
正確姿勢(shì)
引入
- 使用的是flutter官方維護(hù)的webview插件
webview_flutter: ^0.3.22+1
錯(cuò)誤示例
- 這是最坑的一個(gè),widget都都沒寫全,就寫了倆個(gè)回調(diào),這么寫只會(huì)生效一條
WebViewController _controller;
onWebViewCreated: (WebViewController wvc) {
_controller = wvc;
}
onPageFinished: (String value) {
_controller.evaluateJavascript( 'document.cookie = "SESSIONID=612bc4822b6996d6f335a963c20eb541fba72985; path=/"')
}
- 這個(gè)只寫了一條cookie,這個(gè)是沒問題的,和上面的區(qū)別就是,這個(gè)使用雙引號(hào)包住單引號(hào),只寫了一條的使用也是讓人肝痛
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的設(shè)置需要在頁面加載完之后設(shè)置
///webview控制器
WebViewController _controller;
String _url = "寫入你的鏈接";
WebView(
initialUrl: _url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
_controller = controller;
},
onPageFinished: (url) {
//頁面加載結(jié)束
String cookie =
"document.cookie = 'name=IAmDaShuaiBi';document.cookie = 'id=233'";
_controller.evaluateJavascript(cookie);
},
userAgent: "test;app/1.0.0",
)
- 最重要的變化就是每條cookie都要用document.cookie作為key,這是最最最關(guān)鍵的
優(yōu)化寫法
- 上面的寫法是寫成一行,寫成一行是很致命的操作,讓賦值操作會(huì)變得很迷惑,優(yōu)化下
///webview控制器
WebViewController _controller;
String _url = "寫入你的鏈接";
WebView(
initialUrl: _url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
_controller = controller;
},
onPageFinished: (url) {
//頁面加載結(jié)束
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,搞定