2008-09-25 8 views

Antwort

-2

Ich benutze dies. Es war zuverlässig:

function getCookie(c_name) { 
if (document.cookie.length>0) 
    { 
    c_start=document.cookie.indexOf(c_name + "=") 
    if (c_start!=-1) 
    { 
    c_start=c_start + c_name.length+1 
    c_end=document.cookie.indexOf(";",c_start) 
    if (c_end==-1) c_end=document.cookie.length 
    return unescape(document.cookie.substring(c_start,c_end)) 
    } 
    } 
return "" 

}

+6

Kann problematisch sein, wenn Sie BEL suchen und es gibt einen Cookie namens REBEL, nein? – PhiLho

2

Immer wenn ich brauche es zugreifen, verwende ich document.cookie, im Grunde, wie es in diesem Artikel beschrieben wird. Achtung, ich habe noch nie einen Prototyp benutzt, also könnte es dort einfachere Methoden geben, auf die man einfach nicht gestoßen ist.

+0

Ja, ich habe den Cookie-Code von quirksmode auch in der Vergangenheit benutzt. – EvilSyn

+0

Ich würde auch die Cookie-Funktion von quirksmode empfehlen. – Prestaul

9

Ich benutze diese Routine:

function ReadCookie(name) 
{ 
    name += '='; 
    var parts = document.cookie.split(/;\s*/); 
    for (var i = 0; i < parts.length; i++) 
    { 
    var part = parts[i]; 
    if (part.indexOf(name) == 0) 
     return part.substring(name.length) 
    } 
    return null; 
} 

recht gut funktioniert.

2

Falls jemand anderes es braucht, habe ich zu PhiLho's concern über Teiltreffer behoben, wenn Sie versuchen, einen Cookie-Wert zu holen.

function getCookie(c_name) { 
    var nameEQ = c_name + '='; 
    var c_start = 0; 
    var c_end = 0; 
    if (document.cookie.substr(0, nameEQ.length) === nameEQ) { 
     return document.cookie.substring(nameEQ.length, document.cookie.indexOf(';', nameEQ.length)); 
    } else { 
     c_start = document.cookie.indexOf('; ' + nameEQ); 
     if(c_start !== -1){ 
      c_start += nameEQ.length + 2; 
      c_end = document.cookie.indexOf(';', c_start); 
      if (c_end === -1) {c_end = document.cookie.length;} 
      return document.cookie.substring(c_start, c_end); 
     } 
    } 
    return null; 
} 

Ich habe vor kurzem baute auch eine wesentlich kompakter RegExp, die auch funktionieren sollte:

function getCookie(c_name){ 
    var ret = window.testCookie.match(new RegExp("(?:^|;)\\s*"+c_name+"=([^;]*)")); 
    return (ret !== null ? ret[1] : null); 
} 

ich einige Geschwindigkeitstests haben, die das aus Philo, Quirksmode, und diese beiden scheinen zu zeigen, Implementierungen die Nicht-RegExp-Version (mit IndexOf ist sehr schnell, keine große Überraschung) oben ist der schnellste. http://jsperf.com/cookie-fetcher

+0

In Ihrer neuen Funktion, wo das Argument "c_name" geht? – ermannob

Verwandte Themen