【问题标题】:jQuery detecting cookies enabled启用 jQuery 检测 cookie
【发布时间】:2011-12-28 02:20:41
【问题描述】:

我有一个基于 jQuery 的网络应用程序。我的要求相当简单:我想使用 jQuery 来查明用户是否在他们的 Web 浏览器中启用或禁用了 cookie。我知道有一个可用的插件可用于创建/检索/删除/更新 cookie。但是,jQuery 有没有办法检测用户代理的设置?

【问题讨论】:

    标签: jquery cookies


    【解决方案1】:

    你不需要 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);
    }
    

    http://sveinbjorn.org/cookiecheck

    【讨论】:

    • 比6行JS简单吗?
    • 2 行代码优于 6 行。 jQuery 解决了跨浏览器的不兼容问题,并且经过许多开发人员的广泛测试。 stackoverflow.com/a/2031653/59087
    • @Scottie,与其说是行数,不如说是您获得的跨浏览器兼容性,这意味着您不必花更多时间在不同的浏览器上测试此解决方案。
    • @johntrepreneur:您的意思是您不必跨多个浏览器测试 jQuery 解决方案?呵呵,显然我一直都做错了。当然,您可以为此使用 jQuery(尽管 Dave Jarvis 断言它是“2 行”实际上应该是“2 行加上 95 行 jQuery 插件”),但添加一个 jQuery 插件只是为了测试是否启用了 cookie我会给我的一个团队成员一份 Javascript: The Good Parts for doing 的副本。
    【解决方案2】:

    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"
    • @Naga 他依靠条件编译“特征检测”(即仅)启用(添加“!”)通过写入/读取文档来访问 cookie 的第二个测试块。曲奇饼 。这并不是真正的未来证明,因为它假设所有向 cookieEnabled 返回 true 的浏览器都将进行条件编译。
    • @josh 这在 IE11 中失败,因为它总是返回 true 并且 CC 似乎在 IE11 See Demo here 中被禁用。请参阅 Mike 的回答 here,似乎最好不要依赖 navigator.cookieEnabled
    • 我说我们都只使用modernizr
    【解决方案3】:

    最简单的方法是检查包含浏览器信息的navigator 的属性。 Reference

    您可以使用navigator.cookieEnabled === true 来检测浏览器对cookie 的支持。

    【讨论】:

      【解决方案4】:

      我喜欢这个 1 线性函数:

      function cookiesEnabled() {
          return $.cookie('check', 'valid', { expires: 1 }) && $.cookie('check') == 'valid';
      }
      

      【讨论】:

        【解决方案5】:

        您为什么要使用属性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;
            }
        

        【讨论】:

          【解决方案6】:

          您可以在加载页面时简单地设置一个 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>
          

          【讨论】:

          • 上面的代码就是我的意思。我仍然不明白为什么我的答案被选为 -1。
          猜你喜欢
          • 2011-01-15
          • 2012-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-07
          相关资源
          最近更新 更多