Javascript navigator.cookieEnabled Совместимость браузера - PullRequest
18 голосов
/ 25 мая 2011

Насколько хорошо поддерживается navigator.cookieEnabled?Могу ли я безопасно положиться на него для всех браузеров?

Ответы [ 4 ]

33 голосов
/ 25 мая 2011

Я знаю, что он присутствует в , по крайней мере, IE 6 и более поздних версиях , Firefox 1 и более поздних версиях , и Dottoro сообщает, что он поддерживается всеми основными браузерами . Однако он не является частью какой-либо спецификации DOM и поэтому не гарантируется, что он будет доступен или правильно реализован во всех браузерах (например, в мобильных браузерах с ограниченными реализациями DOM).

Как обнаружили некоторые, IE возвращает true для navigator.cookieEnabled, даже если cookie-файлы заблокированы для текущего сайта. Это означает, что в настоящее время вы вообще не можете полагаться на собственность, и вам следует полностью ее избегать.

Для полной проверки поддержки файлов cookie между браузерами вы можете использовать что-то вроде этого:

var cookies = ("cookie" in document && (document.cookie.length > 0 ||
        (document.cookie = "test").indexOf.call(document.cookie, "test") > -1));

Демо: http://codetester.org/31011785

Это вернет false в браузерах, у которых отключены файлы cookie или которые не поддерживают свойство DOM уровня 2 document.cookie, что примерно так же далеко, как вы можете зайти в JS.

23 голосов
/ 23 марта 2013

В быстром тестировании только сейчас (с использованием IE9) выясняется, что navigator.cookieEnabled по-прежнему возвращает true, когда браузер блокирует файлы cookie для этого сайта.

Другими словами, файлы cookie включены, но не для той конкретной страницы, на которой вы находитесь.

Поэтому вам нужно проверить, действительно ли cookie работают, когда вы их устанавливаете. Правильный код должен быть (изменен из ответа Энди Э):

var cookies = 
    ("cookie" in document && (document.cookie.length > 0 ||
    (document.cookie = "test").indexOf.call(document.cookie, "test") > -1))

Нет смысла проверять navigator.cookieEnabled.

0 голосов
/ 08 апреля 2019

navigator.cookieEnabled не всегда надежен и совсем не работает в старых браузерах.

Этот ответ будет работать во всех браузерах, поддерживающих JavaScript.Кроме того, для этого не требуется jQuery, и он удаляет тестовый файл cookie после его завершения.

// returns 1 or 0 instead of true or false. Returns null if inconclusive.
function cookiesEnabled() {
    var i, j, cookies, found;
    document.cookie = 'testcookiesenabled=1';
    for (i=0; i<2; i++) {
        found = false;
        cookies = document.cookie.split(';');
        j = cookies.length;
        while(j--) {
            while (cookies[j].charAt(0)==' ') {// trim spaces
                cookies[j] = cookies[j].substring(1);
            }
            if (cookies[j].indexOf('testcookiesenabled=')==0) {
                found = true;
                break;
            }
        }
        if (!found) {
            return i;
        }
        // Delete test cookie.
        document.cookie = 'testcookiesenabled=; expires=Thu, 01 Jan 1970 00:00:01 GMT';
    }
    // Results inconclusive.
}
0 голосов
/ 30 июля 2014

Мне нравится эта функция 1 вкладыша:

function cookiesEnabled() {
    return $.cookie('check', 'valid', { expires: 1 }) && $.cookie('check') == 'valid';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...