WebView颤动:初始化url时无法将'cookie'设置为标题

Posted

技术标签:

【中文标题】WebView颤动:初始化url时无法将\'cookie\'设置为标题【英文标题】:WebView flutter: Failed to set the 'cookie' into header when initialize urlWebView颤动:初始化url时无法将'cookie'设置为标题 【发布时间】:2021-03-08 03:22:26 【问题描述】:

我正在使用webview_flutter: ^1.0.7 在我的应用程序上显示网页:

WebView(
     initialMediaPlaybackPolicy: AutoMediaPlaybackPolicy.always_allow,
     javascriptMode: JavascriptMode.unrestricted,
     onWebViewCreated: (webViewController) async 
            _controller.complete(webViewController);

在 initState 方法中我有这些代码:

  @override
  void initState() 
    super.initState();
    cookieManagerr.clearCookies();    
    _controller.future.then((controller) async 
      wvc = controller;
      // wvc.evaluateJavascript('document.cookie = "SESSION-Test=token";');
      Map<String, String> header = 'Cookie': 'ASP.NET_SessionId=222';
      wvc.loadUrl(
        '$widget.url?BranchName=&latitude=$latitude&longitude=$longitude',
        headers: header,
      );
    );
  

但运行后没有任何内容添加到标题中。

如果我将代码更改为:

 WebView(
                initialMediaPlaybackPolicy:
                    AutoMediaPlaybackPolicy.always_allow,
                initialUrl:
                    '$widget.url?BranchName=&latitude=$latitude&longitude=$longitude',
                javascriptMode: JavascriptMode.unrestricted,
                onWebViewCreated: (webViewController) async 
                  webViewController.evaluateJavascript(
                      'document.cookie = "SESSION-Test=token";');

我收到了这个错误:

I/chromium( 6239): [INFO:CONSOLE(1)] "Uncaught SecurityError: Failed to set the 'cookie' property on 'Document': Access is denied for this document.", source:  (1)
D/EGL_emulation( 6239): eglMakeCurrent: 0xd2aea420: ver 2 0 (tinfo 0xb48e41f0)
I/chromium( 6239): [INFO:CONSOLE(17932)] "You are using OSRM's demo server. Please note that it is **NOT SUITABLE FOR PRODUCTION USE**.

如何设置适用于 iosandroid 的 cookie?

【问题讨论】:

【参考方案1】:

首先,您的 html 可能有问题。例如,https://github.com/js-cookie/js-cookie/issues/531 表示如果脚本在具有沙盒属性的 iframe 中执行,则会引发错误。

其次,尝试使用其他方式而不是 cookie 怎么样?例如,要将一些变量从 Flutter 传递给 javascript,您可以:

    webViewController.evaluateJavascript('window.hello="world";') 或者,你可以webViewController.evaluateJavascript('window.your_js_method("world");')

【讨论】:

我尝试加载这个 url 进行测试:https://ipb.parsian-bank.ir/HDMap/Mobile2.php?BranchName=&amp;latitude=35.7312303&amp;longitude=51.4330587 并且我在 initstate wvc.evaluateJavascript('document.cookie="SESSION-Test=token";'); 中更改了 set cookie 但我得到了"Uncaught SecurityError: Failed to set the 'cookie' property on 'Document': Access is denied for this document.", source: (1) !!本站不能设置cookie吗?这是我的代码paste.ubuntu.com/p/WGNtrVjbwz@ch271828n ` @sayreskabir 听起来像是对那个网页的限制?它看起来像一家银行,所以我希望它在 js 安全方面有特殊的技巧。首先,在您知道安全性非常薄弱的​​另一个网页上尝试您的 cookie 技术。 @sayreskabir 嗨,你解决了吗?如果是这样,您可以将此答案标记为已接受并投票:) 我将尝试更改我的网址,然后我将进行测试。现在我将我的网址更改为flutter.dev 或***.com,但我仍然得到Uncaught SecurityError。 @ch271828n @sayreskabir 嗯,这是个问题……你在 ios 上看到问题了吗?如果是这样,那可能是对 android 中底层 webview 的限制。

以上是关于WebView颤动:初始化url时无法将'cookie'设置为标题的主要内容,如果未能解决你的问题,请参考以下文章

在颤动的 webview 之间共享 cookie

在颤动中从webview中删除html元素

如何让 Chrome 支持的 webview 颤动?

如何在颤动的 webView 中屏蔽广告(移动应用中的网页)

颤动:在您离开页面时关闭webview

在颤动的webview中禁用水平滚动