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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM