Веб-просмотр Java: "Не удалось прочитать свойство" cookie "из" Документа ": доступ запрещен для этого документа"

Я пытаюсь использовать 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, я получаю:

Uncaught SecurityError: не удалось прочитать свойство "cookie" из "Документ": доступ запрещен для этого документа.

Что я делаю неправильно?

Изменить: Я забыл указать, что я показываю в своем веб-браузере автономный HTML-страницу.

И я не понимаю, когда я нахожусь на вкладке консоли в Chrome Developper Tools, я могу прочитать сообщение об ошибке: SecurityError: Не удалось прочитать свойство "cookie" в "Документе": для этого документа отказано в доступе.

Если я изменю ширину url "window.location = 'http://www.google.fr, страница будет отображаться в моем веб-браузере, и если я наберу вкладку" window.cookie '. У меня нет никакой ошибки, я вижу значение cookie.

Но если я использую 'history.back()', webview отображает мою оффлайн-страницу, а если type: 'window.cookie', то всегда получаю ту же ошибку.

Сообщение об ошибке отображается, когда я использую автономную страницу.

Может у кого-нибудь есть идея?

Ответ 1

Три года спустя...

Но у меня та же проблема. И я нашел только одно решение.

Просто отключите куки перед запуском скрипта (код Kotlin):

    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 использует для предотвращения "Uncaught SecurityError", когда вы используете локальный HTML с javascript, который пытается загрузить данные из ссылок BaseURL.