Flutter Webview添加Cookie的正確姿勢(shì)

場(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,搞定
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容