2010-01-30 6 views

Répondre

11

Essayez ceci:

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); 
} 
+0

cela fonctionnera-t-il sur tous les navigateurs? –

+0

Il devrait, le deuxième contrôle (tentative de créer un cookie et voir si vous pouvez récupérer la valeur que vous avez tenté de définir) est destiné à chaque navigateur. La première vérification est juste une vérification plus rapide si cette propriété est stockée dans le DOM. (supporté dans les navigateurs modernes) –

+0

navigator.cookieEnabled renvoie toujours vrai pour IE11, y at-il un autre moyen de faire la même chose? J'essaie cela depuis un certain temps mais je n'arrive pas à trouver de solution. – Developer

1

stackoverflow.com utilise <noscript> tags pour afficher une page spéciale si JavaScript est désactivé. Il n'y a rien d'équivalent pour les cookies intégrés dans la langue. Votre meilleur pari est probablement de jeter un oeil à this thread sur la façon de détecter si les cookies sont désactivés.

-1

D'abord, vous testez pour voir si les cookies sont activés. Si c'est le cas, vous envoyez un message. Vous pouvez masquer le message en utilisant CSS, puis afficher après le test, mais l'utilisateur le verra s'il n'utilise pas de CSS. Vous pouvez avoir l'élément mais avec rien à l'intérieur, de sorte qu'il ne s'affiche pas, puis l'utilisateur innerHTML pour entrer le message après le test.

les cookies ont déjà été supposant mis (ou la tentative d') utiliser:

var cookieMessage = "You don't have cookies turned on!"; 
    var cookieHTML = document.getElementById("cookiesOff"); 
    function cookieMessage() { 
    if(document.cookie.length == 0) { 
      cookieHTML.innerHTML(cookieMessage); 
      } 
    } 

et d'avoir un élément HTML comme un h3 ou p avec un id de cookiesOff.

13

Il y avait un JavaScript navigator.cookieEnabled interface, mais les navigateurs d'aujourd'hui ont une beaucoup plus large gamme de contrôles de cookies que juste « activé »/« désactivé », y compris les options de session/persistants, première partie/tiers, paramètres spécifiques au site et P3P. Donc, renifler cette propriété est peu utile maintenant. Non, le seul moyen fiable de savoir si vous pouvez définir un cookie est d'essayer de le définir et de voir s'il est toujours là. Un autre problème est que bien que de nombreux navigateurs rétrogradent un cookie persistant dans un cookie de session lorsque les contrôles de confidentialité de l'utilisateur ne le permettent pas, IE ne le fera pas.

Si vous essayez de définir un cookie persistant dans IE lorsqu'ils sont désactivés, le cookie sera simplement jeté sur le sol. Cela peut vous intercepter si vous utilisez un simple vérificateur de cookies de session, que les cookies sont activés, puis essayez de définir un cookie persistant. Et vous ne pouvez pas essayer de définir comme cookie de session et un cookie persistant, car lorsque vous définissez un cookie persistant dans IE avec des cookies persistants désactivés, il sera même supprimer le cookie de session existant du même nom . Oh IE!

Donc, si vous avez besoin de définir un cookie persistant, mais se contentent d'où la session persistante ne sont pas disponibles, il vous faudrait utiliser ce premier pour savoir ce que vous êtes autorisé à faire:

// 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; 
} 
+0

Pourrait aider quelqu'un: J'ai utilisé cette fonction pour afficher un message de boîte de dialogue jquery # (une seule fois) aux navigateurs qui supportent les cookies persistants. Après avoir vérifié le support, je fais un document.write de la boîte de dialogue div, puis mets un cookie que php cherche pour que la fenêtre de dialogue n'ennuie pas les gens à plusieurs reprises. –

+0

Quelqu'un at-il une source d'amélioration potentielle de navigator.cookieEnabled depuis 2010? – Bombinosh

Questions connexes