2010-12-13 72 views
0

問候所有的智者!我真的需要你的幫助,因爲我是新來的JS/DOM的東西。我有這個基本上獲取和設置cookie的腳本,當特定元素觸發時,它將存儲新的cookie值並刷新瀏覽器。該值然後注入到body類。但是,在向body添加新類的過程中,我已經解決了一個問題,它會在讀取當前樣式css之前讀取默認樣式(FOUC)。如何防止閃光燈未風格的內容時,注射類的身體

(function ($) {

var Cookies = { 
    init: function() { 
     themes = Cookies.getCookie('THEME'); 
     if (themes != null && themes != '') { 
      document.getElementsByTagName('body')[0].className += ' custom-'+themes; 
     } 
     else { 
      return; 
     } 
    }, 

    setCookie: function (name, value, expired) { 
     var expiredDate = new Date(); 
     expiredDate.setDate(expiredDate.getDate() + expired); 
     document.cookie = name + '=' + escape(value); 
     (expired == null) ? '' : ';expires=' + expiredDate.toUTCString(); 
    }, 

    getCookie: function (name) { 
     if (document.cookie.length > 0) { 
      cookieStart = document.cookie.indexOf(name + '='); 
      if (cookieStart != -1) { 
       cookieStart = cookieStart + name.length + 1; 
       cookieEnd = document.cookie.indexOf(';', cookieStart); 
       if (cookieEnd == -1) { 
        cookieEnd = document.cookie.length; 
       } 
       return unescape(document.cookie.substring(cookieStart, cookieEnd)); 
      } 
     } 
     return ''; 
    } 
}; 

$('.boxer').each(function() { 
    $(this).bind('click', function (e) { 
     e.preventDefault(); 
     var element = $(this).attr('class').replace('boxer', '').replace(' ', ''); 
     setTimeout(function() { 
      Cookies.setCookie('THEME', element, 1); 
      window.location.replace(window.location.href); 
     }, 100); 
    }); 
}); 

$(function() { 
    Cookies.init(); 
}); 

})(jQuery);

我怎樣才能避免這個問題?我已經試過把它作爲鏈接元素之前的第一個元素,但是它也失敗了。

回答

0

嘗試設置在body標籤的主題,而無需刷新瀏覽器。 jQuery的一大優點是你可以在不刷新頁面的情況下注入新的body類。不過,您仍然應該設置Cookie,因爲這對網站的其他部分很重要。

當您從頁面瀏覽頁面,你需要使用一些服務器端腳本語言來讀取cookie和寫入瀏覽器中的網頁加載前體標記相應的CSS類。在PHP中,這看起來是這樣的:

<body <?php if(isset($_COOKIE['THEME'])) { echo 'class="'.$_COOKIE['THEME'].'"'; } ?>> 

我不建議用JavaScript單獨的原因,嘗試這一點,你說,該頁面將加載並沒有風格,直到JavaScript引擎可以在網絡上運行瀏覽器並添加所需的CSS類。

+0

同意同意..也許我應該使用服務器端要調用的cookie並把它傳遞給身體類。感謝Liam。 – fadzril 2010-12-13 13:25:13

+0

但是,如果有人有另一種技術和選擇,歡迎回復此線程.. :)。我非常樂意閱讀你的意見。 – fadzril 2010-12-13 13:26:17

+0

同樣在這裏,我用這個技術,什麼也沒有,但成功,但如果任何人有另一種方式來做到這一點,我會興趣閱讀什麼,可能是。 – Liam 2010-12-14 11:21:10