如果在浏览器中禁用了Cookie,如何显示消息?像http://stackoverflow.com一样显示JavaScript是否被禁用。
答案 0 :(得分:15)
曾经有一个JavaScript navigator.cookieEnabled
界面,但今天浏览器的多范围更广泛的Cookie控件而不仅仅是'启用'/'禁用',包括会话/持久选项,第一方/第三方,特定于站点的设置和P3P。所以嗅探这个属性现在用处不大。
不,找出是否可以设置cookie的唯一可靠方法是尝试设置它,看看它是否仍然存在。另一个问题是,当用户的隐私控制不允许时,许多浏览器会将持久cookie降级为会话cookie,IE不会。
如果您在禁用IE时尝试在IE中设置持久cookie,那么cookie将被简单地扔在地板上。如果你使用一个简单的会话cookie检查器,找到cookie,然后尝试设置一个持久cookie,这可能会让你失望。并且您无法逃避尝试将会话cookie设置为和持久性cookie,因为当您在IE中设置持久性cookie且禁用持久性cookie时,它甚至会删除同名的现有会话cookie。哦IE!
因此,如果你需要设置一个持久性cookie,但是在没有持久性的会话中使用它,你必须首先使用它来找出你可以做的事情:
// Find out what cookies are supported. Returns:
// null - no cookies
// false - only session cookies are allowed
// true - session cookies and persistent cookies are allowed
// (though the persistent cookies might not actually be persistent, if the user has set
// them to expire on browser exit)
//
function getCookieSupport() {
var persist= true;
do {
var c= 'gCStest='+Math.floor(Math.random()*100000000);
document.cookie= persist? c+';expires=Tue, 01-Jan-2030 00:00:00 GMT' : c;
if (document.cookie.indexOf(c)!==-1) {
document.cookie= c+';expires=Sat, 01-Jan-2000 00:00:00 GMT';
return persist;
}
} while (!(persist= !persist));
return null;
}
答案 1 :(得分:12)
试试这个:
function are_cookies_enabled()
{
var cookieEnabled = (navigator.cookieEnabled) ? true : false;
if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled)
{
document.cookie="testcookie";
cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
}
return (cookieEnabled);
}
答案 2 :(得分:1)
<noscript>
标记来显示特殊页面。对于内置于该语言中的cookie,没有任何等价物。你最好的选择可能是this thread看看如何检测cookie是否被禁用。
答案 3 :(得分:-1)
首先测试是否启用了Cookie。如果是,则输出消息。您可以使用CSS隐藏消息,然后在测试后取消隐藏,但如果用户不使用CSS,则会看到它。您可以拥有该元素,但内部没有任何内容,因此它不会显示,然后用户innerHTML在测试后输入消息。
假设已经设置(或尝试使用)cookie:
var cookieMessage = "You don't have cookies turned on!";
var cookieHTML = document.getElementById("cookiesOff");
function cookieMessage() {
if(document.cookie.length == 0) {
cookieHTML.innerHTML(cookieMessage);
}
}
然后有一个HTML元素,如h3
或p
,ID为cookiesOff
。