【发布时间】:2011-12-28 02:20:41
【问题描述】:
我有一个基于 jQuery 的网络应用程序。我的要求相当简单:我想使用 jQuery 来查明用户是否在他们的 Web 浏览器中启用或禁用了 cookie。我知道有一个可用的插件可用于创建/检索/删除/更新 cookie。但是,jQuery 有没有办法检测用户代理的设置?
【问题讨论】:
我有一个基于 jQuery 的网络应用程序。我的要求相当简单:我想使用 jQuery 来查明用户是否在他们的 Web 浏览器中启用或禁用了 cookie。我知道有一个可用的插件可用于创建/检索/删除/更新 cookie。但是,jQuery 有没有办法检测用户代理的设置?
【问题讨论】:
你不需要 jQuery,你可以使用 vanilla Javascript:
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);
}
【讨论】:
Internet Explorer(至少是版本 10)对于 navigator.cookieEnabled 始终返回 true。以下是解决此问题的方法:
function areCookiesEnabled() {
var cookieEnabled = navigator.cookieEnabled;
// When cookieEnabled flag is present and false then cookies are disabled.
if (cookieEnabled === false) {
return false;
}
// try to set a test cookie if we can't see any cookies and we're using
// either a browser that doesn't support navigator.cookieEnabled
// or IE (which always returns true for navigator.cookieEnabled)
if (!document.cookie && (cookieEnabled === null || /*@cc_on!@*/false))
{
document.cookie = "testcookie=1";
if (!document.cookie) {
return false;
} else {
document.cookie = "testcookie=; expires=" + new Date(0).toUTCString();
}
}
return true;
}
【讨论】:
(cookieEnabled === null || /*@cc_on!@*/false) "|| false"
最简单的方法是检查包含浏览器信息的navigator 的属性。 Reference
您可以使用navigator.cookieEnabled === true 来检测浏览器对cookie 的支持。
【讨论】:
我喜欢这个 1 线性函数:
function cookiesEnabled() {
return $.cookie('check', 'valid', { expires: 1 }) && $.cookie('check') == 'valid';
}
【讨论】:
您为什么要使用属性cookieEnabled 进行测试?只需尝试创建一个 cookie 并检查它是否已完成。如果 cookie 有效,请删除测试创建的 cookie。
function are_cookies_enabled()
{
document.cookie="testcookie=valid";
cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
if(cookieEnabled){
document.cookie = "testcookie=; expires=Thu, 01 Jan 1970 00:00:00 UTC;";
}
return cookieEnabled;
}
【讨论】:
您可以在加载页面时简单地设置一个 test_cookie。如果设置则删除,否则 alert('please enable cookies...');
<script>
jQuery(document).ready(function()
{
var TEST_COOKIE = 'test_cookie';
jQuery.cookie( TEST_COOKIE, true );
if ( jQuery.cookie ( TEST_COOKIE ) )
{
jQuery.cookie( TEST_COOKIE, null ); // delete the cookie
alert( 'Good news, cookies are enabled.' );
}
else
{
alert( 'Cookies not enabled. Please enable and try again.' );
}
}
</script>
【讨论】: