Java webview:“无法从'文档'中读取'cookie'属性:此文档的访问被拒绝”

2022-09-03 07:27:28

我试图在我的网络视图中使用cookie,但没有成功。

在我的代码中:

CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptFileSchemeCookies(true);
    cookieManager.setAcceptCookie(true);
    cookieManager.acceptCookie();

    myWebView = (WebView) getView(champHTML);// description du champ HTML WM16
    myWebView.setBackgroundColor(Color.parseColor("#42A334"));
    myWebView.getSettings().setJavaScriptEnabled(true); //autorisation javascript

但是,当我想使用Chrome Dev Tools调试我的Web视图时,我会得到:

未捕获的安全错误:无法从“文档”中读取“cookie”属性:拒绝访问此文档。

我做错了什么?

编辑:我忘了指定我在我的网络视图中显示离线页面HTML。

我不明白,当我在Chrome Developper Tools的控制台选项卡中时,我可以阅读错误消息:安全错误:无法从“文档”中读取“cookie”属性:此文档的访问被拒绝。

如果我更改网址宽度“window.location = 'http://www.google.fr',则该页面将显示在我的Webview上,如果我在选项卡控制台中键入'window.cookie'。我没有任何错误,我可以看到cookie值。

但是如果我使用'history.back()',webview会显示我的离线页面,如果键入:'window.cookie',我总是会得到相同的错误。

当我使用离线页面时,将显示错误消息。

也许有想法吗?


答案 1

三年后...

但我也有同样的问题。我只找到了一个解决方案。

只需在运行问题脚本(Kotlin 代码)之前禁用 Cookie:

    companion object {
        const val SOME_HTML = """
    <!DOCTYPE html>
        <html>
            <head>
                <script>
                    if(!document.__defineGetter__) {
                        Object.defineProperty(document, 'cookie', {
                            get: function(){return ''},
                            set: function(){return true},
                        });
                    } else {
                        document.__defineGetter__("cookie", function() { return '';} );
                        document.__defineSetter__("cookie", function() {} );
                    }

                   // Your problem script here
                </script>
        </head>
    </html>"""
    }

//And 
webView.settings.javaScriptEnabled = true
webView.loadData(CHARTA_HTML, "text/html; charset=utf-8", "UTF-8")

编辑

另一个解决方法:

如果您使用本地HTML或硬编码的HTML,如上例所示,则需要使用此方法加载HTML:

webview.loadDataWithBaseURL("https://yoursite.com", YOUR_HTML, "text/html; charset=utf-8", "UTF-8", null)

BaseURL用于防止“未捕获的安全错误”,当您将本地HTML与javascript一起使用时,javascript正在尝试从BaseURL链接加载数据。


答案 2

使用 加载 Web 视图时出现此确切错误。loadDataWithBaseURL

我正在传递参数。在此处传递任何有效的 URL 都会导致错误消失。nullbaseUrl

这是在另一个答案的末尾喊出来的。单独发布它,因为它是为我修复它的原因。


推荐