如何检测JavaScript和/或Cookie被禁用?

Mah*_*leh 47 javascript

如何在用户的浏览器中检测到JavaScript或Cookies被禁用并通知他任何帮助?

rob*_*lls 69

要检查cookie,您可以使用:

function checkCookie(){
    var cookieEnabled = navigator.cookieEnabled;
    if (!cookieEnabled){ 
        document.cookie = "testcookie";
        cookieEnabled = document.cookie.indexOf("testcookie")!=-1;
    }
    return cookieEnabled || showCookieFail();
}

function showCookieFail(){
  // do something here
}


// within a window load,dom ready or something like that place your:
checkCookie();
Run Code Online (Sandbox Code Playgroud)

并且为了检查JavaScript,使用<noscript>带有某种消息的标签

  • 如果写了testcookie,你应该删除它. (9认同)
  • 请注意,当JS被禁用时,这将不会运行:) (6认同)
  • @BalusC-是的,希望对操作员很清楚 (2认同)
  • 对于隐私选项设置为"高"的IE,这不起作用.在这种模式下,`navigator.cookieEnabled`是'true`但是`document.cookie`总是空的.最好是删除checkCookie()的第一个测试:`function checkCookie(){document.cookie ="testcookie"; var cookieEnabled =(document.cookie.indexOf("testcookie")!= - 1)?真假; return(cookieEnabled)?true:showCookieFail(); }` (2认同)

Noa*_*mon 19

更新(6/25/18):

很多这些帖子,包括我的,正在从Modernizr获取片段.随着Modernizr代码的更新,它们最终都会变得过时.

我认为这个问题的最佳答案应该是直接使用Modernizr.

if (Modernizr.cookies) {
  // supported
} else {
  // not-supported
}
Run Code Online (Sandbox Code Playgroud)

原答案(5/11/17):

这是直接来自Modernizr,并且在本文中比其他解决方案在更多浏览器中工作.

https://github.com/Modernizr/Modernizr/commit/33f00fbbeb12e92bf24711ea386e722cce6f60cc

function checkCookie(){
    // Quick test if browser has cookieEnabled host property
    if (navigator.cookieEnabled) return true;
    // Create cookie
    document.cookie = "cookietest=1";
    var ret = document.cookie.indexOf("cookietest=") != -1;
    // Delete cookie
    document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
    return ret;
}
Run Code Online (Sandbox Code Playgroud)


Zym*_*tik 15

由于cookie检测在IE 11中不起作用,我建议使用Modernizr方法:

function areCookiesEnabled() {
    try {
      document.cookie = 'cookietest=1';
      var cookiesEnabled = document.cookie.indexOf('cookietest=') !== -1;
      document.cookie = 'cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT';
      return cookiesEnabled;
    } catch (e) {
      return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/Modernizr/Modernizr/blob/5eea7e2a213edc9e83a47b6414d0250468d83471/feature-detects/cookies.js

  • 这比 @Noah Solomon 的答案更新 (2认同)

Nir*_*esh 7

这是最简单的方法

if (navigator.cookieEnabled) {
  document.write("Cookies Enabled");
} else {
  document.write("Oops Cookies Not Enabled");
}
Run Code Online (Sandbox Code Playgroud)
Check if Cookies Enabled in Your Browser:  
<br />
Run Code Online (Sandbox Code Playgroud)

  • 在 React 应用程序 + Firefox 中,“navigator.cookieEnabled”在启动时保持未定义状态,直到某个阶段。例如,如果您需要此标志来确定是否安装 redux 中间件,则此解决方案不起作用。不确定该标志何时填充。 (2认同)