簡體   English   中英

如何檢測 JavaScript 和/或 Cookies 被禁用?

[英]How to detect that JavaScript and/or Cookies are disabled?

如何在用戶的瀏覽器中檢測到 JavaScript 或 Cookies 被禁用並通知他任何幫助?

要檢查 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();

並且為了檢查 JavaScript 使用一個<noscript>標簽,里面有某種消息

更新 (6/25/18):

很多這樣的帖子,包括我的,都是從Modernizr 中摘錄的。 隨着 Modernizr 代碼的更新,它們最終都會過時。

我認為這個問題的最佳答案應該是直接使用 Modernizr。

if (Modernizr.cookies) {
  // supported
} else {
  // not-supported
}

原始答案 (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;
}

由於 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;
    }
}

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

// Example[1]: if ( hasCookies() )
/**
* @hasCookies:  Check if cookie's are Enabled
* @param  {none} ''
* @return {BOOLEAN} true|false
*/
function hasCookies() {
return (navigator.cookieEnabled);
}

 // Example[2]: if ( JLS.TEST.COOKIE() )
// Java Pattern ( How to write usable JS)
/** @namespace JLS classes and functions. */
var JLS = JLS || {};
/**
* TEST utility
* @namespace JLS
* @class TEST
*/
JLS.TEST = {

/**
* @public-method COOKIE
* @COOKIE  Check if cookie's are Enabled
* @return {BOOLEAN} true|false
*/
 COOKIE: function () {
    //Change this (library). Not main.js (Algorithm)
    return (navigator.cookieEnabled);
    }
};

這是最簡單的方法

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

假設 JavaScript 已啟用,這將告訴您 cookie 是否已啟用。 適用於舊瀏覽器。

// returns 1 or 0 instead of true or false. Returns null if inconclusive.
function cookiesEnabled() {
    var i, j, cookies, found;
    if (navigator.cookieEnabled===false) return 0;
    document.cookie = 'testcookiesenabled=1';
    for (i=0; i<2; i++) {
        found = false;
        cookies = document.cookie.split(';');
        j = cookies.length;
        while(j--) {
            while (cookies[j].charAt(0)==' ') {// trim spaces
                cookies[j] = cookies[j].substring(1);
            }
            if (cookies[j].indexOf('testcookiesenabled=')==0) {
                found = true;
                break;
            }
        }
        if (!found) {
            return i;
        }
        // Delete test cookie.
        document.cookie = 'testcookiesenabled=; expires=Thu, 01 Jan 1970 00:00:01 GMT';
    }
    // Results inconclusive.
}

僅在禁用 JavaScript 時顯示消息,請使用

<noscript>JavaScript is disabled. Please enabled JavaScript.</noscript>

該函數可以為用戶查看錯誤信息,也可以停止腳本執行,並且可以返回cookies狀態。

function IS_Cookies_Enabled(Show_Message, Stop_Script)
{
    if(Show_Message == undefined){
        Show_Message = true;
    }

    if(Stop_Script == undefined){
        Stop_Script = false;
    }


    var Cookie_Status = navigator.cookieEnabled;
    if (!Cookie_Status)
    { 
        document.cookie = "Test";
        Cookie_Status = document.cookie.indexOf("Test") != -1;
        // Delete test cookies
        document.cookie = "Test=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";

    }

    if((!Cookie_Status) && (Show_Message))
    {
        document.getElementsByTagName('body')[0].innerHTML = "<div style='width: 600px; max-width: 100%; margin: 100px auto;'><h1 style='color: red'>Cookies Required</h1><p style='font-size: 18px;'>Cookies are not enabled on your browser. <br>Please enable cookies in your browser preferences to continue.</p><strong>Sylingo</strong>";
    }

    if((!Cookie_Status) && (Stop_Script))
    {
        throw new Error('Cookies is disabled');
    }
    return Cookie_Status;
}

要使用它:

IS_Cookies_Enabled(true, true);  // Will stop script and view error message

IS_Cookies_Enabled(true, false);  // Just view error message

$Cookies_Status = IS_Cookies_Enabled(false, false);  // return cookies status

並用於檢查 JavaScript 使用:

<noscript>
Javascript is not enabled on your browser. 
</noscript>

這個 JavaScript 函數一直對我有用:

if (typeof areCookiesAllowed !== 'function')
    {
        function areCookiesAllowed()
            {
                var cookies_allowed = navigator.cookieEnabled;

                if (!cookies_allowed)
                    {
                        try
                            {
                                var cur_dt = new Date();
                                var cur_tm = cur_dt.getTime();

                                document.cookie = 'cookie_test_' + cur_tm + '=1';
                                cookies_allowed = document.cookie.indexOf('cookie_test_' + cur_tm + '=') !== -1;
                                document.cookie = 'cookie_test_' + cur_tm + '=1; expires=Thu, 01-Jan-1970 00:00:01 GMT';
                            }
                        catch(err)
                            {
                                return false;
                            };
                    };

                return cookies_allowed;
            };
    };

 if (typeof areCookiesAllowed !== 'function') { function areCookiesAllowed() { var cookies_allowed = navigator.cookieEnabled; if (!cookies_allowed) { try { var cur_dt = new Date(); var cur_tm = cur_dt.getTime(); document.cookie = 'cookie_test_' + cur_tm + '=1'; cookies_allowed = document.cookie.indexOf('cookie_test_' + cur_tm + '=') !== -1; document.cookie = 'cookie_test_' + cur_tm + '=1; expires=Thu, 01-Jan-1970 00:00:01 GMT'; } catch(err) { return false; }; }; return cookies_allowed; }; }; var result_elmt = document.getElementById("result"); var result; if (areCookiesAllowed() === true) { result = 'Congratulations! Cookies are enabled in this Web Browser and on this website!'; } else { result = 'Aww Snap! Unfortunatly cookies are NOT enabled in this Web Browser or are disabled on this website.'; }; result_elmt.innerHTML = result; alert(result);
 <span id="result"></span>

試試<noscript>...</noscript>標簽,它可以部分檢查 JavaScript 是否啟用。

<script type="application/javascript">
    document.write("This text would be displayed if JavaScript is enabled");
</script>
<noscript>
    This text would be displayed if JavaScript is not enabled
</noscript>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM