【发布时间】:2011-01-11 03:48:09
【问题描述】:
如何仅在浏览器中禁用 cookie 时显示消息?如 http://stackoverflow.com 显示 JavaScript 是否被禁用。
【问题讨论】:
标签: javascript html xhtml cookies
如何仅在浏览器中禁用 cookie 时显示消息?如 http://stackoverflow.com 显示 JavaScript 是否被禁用。
【问题讨论】:
标签: javascript html xhtml cookies
曾经有一个 JavaScript navigator.cookieEnabled 接口,但今天的浏览器拥有比“启用”/“禁用”更广泛的 cookie 控件更多,包括会话/持久选项,首先 -方/第三方、特定于站点的设置和 P3P。所以现在嗅探这个属性没什么用了。
不,确定是否可以设置 cookie 的唯一可靠方法是尝试设置它,看看它是否仍然存在。另一个问题是,当用户的隐私控制不允许时,许多浏览器会将持久性 cookie 降级为会话 cookie,而 IE 则不会。
如果您在禁用 IE 时尝试在 IE 中设置持久性 cookie,则 cookie 将被简单地扔到地板上。如果您使用简单的会话 cookie 检查器,发现 cookie 已启用,然后尝试设置持久性 cookie,这可能会引起您的注意。而且您无法尝试将其设置为会话 cookie和一个持久 cookie,因为当您在禁用持久 cookie 的 IE 中设置持久 cookie 时,它甚至会 删除 em> 同名的现有会话 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;
}
【讨论】:
试试这个:
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);
}
【讨论】:
stackoverflow.com 使用 <noscript> 标签在 JavaScript 被禁用时显示一个特殊页面。语言中内置的 cookie 没有任何等价物。您最好的选择可能是查看this thread,了解如何检测 cookie 是否被禁用。
【讨论】:
首先您测试一下是否启用了 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。
【讨论】: