SORU
12 NİSAN 2011, Salı


En kısa JavaScript ile bir cookie okuma fonksiyonu

JavaScript ile bir çerez okumak için en kısa, doğru ve çapraz tarayıcı uyumlu yöntemi nedir?

Çok sık, bir süre bina tek başına bir komut (burada yapamam herhangi bir dış bağımlılıkları), buluyorum kendimi ekleme bir işlev için okuma çerezler, ve genellikle sonbahar-geri QuirksMode.org readCookie() yöntem (280 byte, 216 minified.)

function readCookie(name) {
    var nameEQ = name   "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i  ) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

Bu iş, ama onun çirkin ve kabartmak biraz her zaman ekler.

Bu gibi jQuery.cookie kullandığı yöntem bir şey (değiştirilmiş, 165 bayt, 125 minified):

function read_cookie(key)
{
    var result;
    return (result = new RegExp('(?:^|; )'   encodeURIComponent(key)   '=([^;]*)').exec(document.cookie)) ? (result[1]) : null;
}

Notbu bir 'Kod Golf' rekabet: readCookie benim görevim boyutunu azaltmada yasal olarak ilgileniyorum, ve geçerli. ben çözümünü sağlamak değil

CEVAP
12 NİSAN 2011, Salı


Bu sadece hiç belge vuracaktır.çerez BİR zaman. Sonraki her istek anında olacak.

(function(){
    var cookies;

    function readCookie(name,c,C,i){
        if(cookies){ return cookies[name]; }

        c = document.cookie.split('; ');
        cookies = {};

        for(i=c.length-1; i>=0; i--){
           C = c[i].split('=');
           cookies[C[0]] = C[1];
        }

        return cookies[name];
    }

    window.readCookie = readCookie; // or expose it however you want
})();

Gerçekten tarayıcı bağımlı olan .forEach (o zaman bile bu kadar kurtarmıyorsun) kullanmakta özgürsün tabii bu genel mantık daha hızlı bir yolu yok maalesef

Kendi örnek biraz 120 bytes sıkıştırılmış:

function read_cookie(k,r){return(r=RegExp('(^|; )' encodeURIComponent(k) '=([^;]*)').exec(document.cookie))?r[2]:null;}

Eğer encodeURIComponent düşürürsen eğer 1 harfli isim bir işlev yaparsanız 110 bytes, 90 bytes alabilirsiniz.

73 bytes, ama sonra Ekleme encodeURIComponent readCookie 102 bytes adlı 82 bytes adil oldum:

function C(k){return(document.cookie.match('(^|; )' k '=([^;]*)')||0)[2]}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AutoklubZAPRESIC

    AutoklubZAPR

    17 Mayıs 2011
  • CNET

    CNET

    5 Mayıs 2006
  • The Pet Collective

    The Pet Coll

    5 Ocak 2012