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**.
如何设置适用于 ios 和 android 的 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=&latitude=35.7312303&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'设置为标题的主要内容,如果未能解决你的问题,请参考以下文章