Javascript navigator.cookieEnabled浏览器兼容性

问题描述

|
navigator.cookieEnabled
支持程度如何?我可以安全地在所有浏览器中使用它吗?     

解决方法

我知道它至少存在于IE 6和更高版本,Firefox 1和更高版本中,并且Dottoro报告说所有主要浏览器都支持它。但是,它不是任何DOM规范的一部分,因此不能保证在所有浏览器(例如,DOM实现受限的移动浏览器)中都可用或正确实现。 正如某些人发现的那样,即使为当前站点阻止了cookie,IE也会为“ 0”返回true。这意味着您当前根本无法依赖该属性,因此应完全避免使用它。 为了进行全面的跨浏览器cookie支持检查,您可能需要使用以下代码:
var cookies = (\"cookie\" in document && (document.cookie.length > 0 ||
        (document.cookie = \"test\").indexOf.call(document.cookie,\"test\") > -1));
演示:http://codetester.org/31011785 在禁用了cookie或不支持DOM级别2属性
document.cookie
的浏览器中,此方法将返回
false
,这与您在JS中所能达到的程度差不多。     ,刚才在快速测试中(使用IE9),当浏览器阻止该站点的cookie时,navigator.cookieEnabled仍然返回true。 换句话说,启用了cookie,但未启用您所在的特定页面。 因此,您需要在设置cookie时测试它们是否真正起作用。正确的代码应该是(根据Andy E \的答案修改):
var cookies = 
    (\"cookie\" in document && (document.cookie.length > 0 ||
    (document.cookie = \"test\").indexOf.call(document.cookie,\"test\") > -1))
检查navigator.cookieEnabled确实没有意义。     ,我喜欢这个1班轮功能:
function cookiesEnabled() {
    return $.cookie(\'check\',\'valid\',{ expires: 1 }) && $.cookie(\'check\') == \'valid\';
}
    ,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.
}