gpt4 book ai didi

flutter - 如何在 webview_flutter 中设置 Cookie?

转载 作者:行者123 更新时间:2023-12-03 23:51:08 32 4
gpt4 key购买 nike

如何在初始化期间在 webview_flutter 中设置 Cookies?

body: WebView
initialUrl: index_url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller=webViewController;
},
javascriptChannels: <JavascriptChannel>[
_toasterJavascriptChannel(context),
].toSet(),
onPageFinished: (String url) {
print('Page finished loading: $url');
},
),

最佳答案

您可以使用 Tow 方法设置 cookie。

解决方案 1。
使用 webViewController.evaluateJavascript()例如:

    final Completer<WebViewController> _controller =
Completer<WebViewController>();
WebViewController _webViewController;

@override
Widget build(BuildContext context) {
_controller.future.then((controller) {
_webViewController = controller;
_webViewController.loadUrl(URL);
});
return Scaffold(
body: SafeArea(
child: Container(
child:
WebView(
debuggingEnabled: true,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
onPageFinished: (String value) {
setSession(sessionId, _webViewController);
},
),
),
),
);
}

void setSession(String sessionId, WebViewController webViewController) async {
if (Platform.isIOS) {
await webViewController.evaluateJavascript("document.cookie = 'ASP.NET_SessionId=$sessionId'");
} else {
await webViewController.evaluateJavascript('document.cookie = "ASP.NET_SessionId=$sessionId; path=/"');
}
}

但是使用它我们可以在 onPageFinished 之后设置 cookie在 Web View 中。只有在您重新加载 webview 后,此解决方案才会起作用。这意味着在第一次构建时,此方法会将 cookie 添加到 WebView 并在第二次之后获得结果。
如果您希望 WebView 加载预设 Cookie,请检查下一个解决方案

解决方案 2。使用 headers我们可以在发起 http 请求时设置 cookie。例如:
final Completer<WebViewController> _controller =
Completer<WebViewController>();
WebViewController _webViewController;

@override
Widget build(BuildContext context) {
_controller.future.then((controller) {
_webViewController = controller;
Map<String, String> header = {'Cookie': 'ASP.NET_SessionId=$sessionId'};
_webViewController.loadUrl(URL, headers: header);
});
return Scaffold(
body: SafeArea(
child: Container(
child:
WebView(
debuggingEnabled: true,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
),
),
),
);
}

这将使用给定的 Cookie 加载 WebView。

关于flutter - 如何在 webview_flutter 中设置 Cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57751391/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com