使用WebViewCookieManager. setWebview_flutter的Cookie

xxhby3vn  于 2023-04-07  发布在  Flutter
关注(0)|答案(2)|浏览(157)

我对Flutter还很陌生,目前我在Flutter中调用Webview时遇到了使用最新版本flutter docs中的webview_flutter包(即4.0.7)作为初始cookie的问题
WebView.initialCookies已被删除。在调用WebViewController.loadRequest之前,请使用WebViewCookieManager.setCookie。
目前Flutter已将方法WebView with controller更改为WebViewWidget with controller。
这是我初始化WebView的新代码

_webViewController = WebViewController()
  ..loadRequest(
    Uri.parse("https://flutter.dev/"),
  )
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..setNavigationDelegate(NavigationDelegate(
    onPageStarted: (url) {
      print("come here: $url");
    },
    onPageFinished: (url) async {
      final cookies = await _webViewController.runJavaScriptReturningResult(
        'document.cookie',
      );
      // I can get cookie when page is reload or go to next page here
      print("cookie: $cookies");
    },
  ));

这是用于生成视图

// view build
return Stack(
  children: [
    WebViewWidget(
      controller: widget.controller,
    ),
  ],
);

我可以得到网站的cookie每次重新加载或通过捕捉动作onPageFinished转到下一页。但问题是,我想初始化的网址与initialCookies时,录音到Webview。
目前的答案是webview_flutter: ^3.0.0,因此目前无法用于最新版本。
非常感谢你的帮助。

jtw3ybtb

jtw3ybtb1#

您可以使用initialUrlonPageFinished参数来完成此操作

String initialUrl = "https://flutter.dev/";
String cookie = "session_id=12345";

WebViewWidget(
  controller: widget.controller,
  initialUrl: '$initialUrl?cookie=$cookie',
  onPageFinished: (url) async {
    final cookies = await _webViewController.runJavaScriptReturningResult(
      'document.cookie',
    );
    print("cookie: $cookies");
  },
);
h79rfbju

h79rfbju2#

对于那些谁寻找一个版本4.0.0+的答案就像我一样。
这就是我的答案

WebViewCookie cookie =
    WebViewCookie(name: "sessionId", value: "12345678", domain: widget.url);
// Flutter has change to this
WebViewCookieManager().setCookie(cookie);
_webViewController = WebViewController()
  ..loadRequest(
    Uri.parse(widget.url),
  );

**注意:**除非widget不会调用,否则调用widget时,Domain必须与url相同。

相关问题