2013-01-11 34 views
0

你好有Stack Overflow用戶。我創建了一個很好的小腳本,將A/B測試信息從其API添加到我們的一個會話cookie中,以存儲在我們的數據庫中。這個腳本適用於所有瀏覽器,但IE(驚喜!)。這是代碼:Javascript會話cookie不寫在IE9中

<script> 
function addTParam() { 
    function getCookie(acqsource) { 
    var i, x, y, ARRcookies = document.cookie.split(';'); 
    for (i = 0; i < ARRcookies.length; i++) { 
     x = ARRcookies[i].substr(0, ARRcookies[i].indexOf('=')); 
     y = ARRcookies[i].substr(ARRcookies[i].indexOf('=') + 1); 
     x = x.replace(/^\s+|\s+$/g, ''); 
     if (x == acqsource) { 
     return unescape(y); 
     } 
    } 
    } 
    if (typeof (abtester) != 'undefined') { 
    var experimentId = 0; 
    var variationId = 0; 
    var variationIdx = -1; 
    var activeExpts = abtester.activeExperiments; 
    var values; 
    var newArray = []; 
    for (var i = 0; i < activeExpts.length; i++) { 
     experimentId = activeExpts[i]; 
     if (abtester.variationIdsMap.hasOwnProperty(experimentId)) { 
      variationId = abtester.variationIdsMap[experimentId]; 
      newArray = newArray.concat(variationId); 
     } 
     } 

    newArray = activeExpts.concat(newArray); 
    values = newArray.join('-'); 

    var contents = getCookie('acqsource'); 
    if (values && values.length > 0 && (contents.indexOf(values) === -1)) { 
     contents += "&tp=" + values; 
     document.cookie = "acqsource=" + contents + "; domain=domain.com; path=/"; 
    } 
    } 
} 
$(document).ready(function() { 
    addTParam(); 
}); 
</script> 

爲了給一點的解釋,該功能將「TP = 123456-7890123」的字符串追加到acqsource餅乾。然而,當它執行getCookie函數時,IE會:a)找不到它,或者b)說它不存在(它應該是,頁面在加載時創建該cookie)。這完全是在DOM完成後加載的,所以這不是問題。

我已經詳盡地搜索了這個問題,甚至找到了我公司的其他幾個開發人員,我們所有人都難倒了。提前致謝!

回答

0

所以,我已經想通了。我檢查cookie的方式是檢查是否有=。這是問題,因爲IE設置會話cookie的方式,如果cookie爲空,它將返回爲undefined,因爲該cookie中沒有=。因此,一些代碼魔力讓我這個:

var contents = getCookie('acqsource'); 
if (values && values.length > 0 && contents !== undefined && (contents.indexOf(values) === -1)) { 
    contents += '&tp=' + values; 
    document.cookie = 'acqsource=' + contents + '; domain=domain.com; path=/'; 
} 
else if (values && values.length >0 && contents === undefined){ 
    document.cookie = 'acqsource=' + values + '; domain=domain.com; path=/'; 
} 

基本上,你需要檢查,如果cookie是不確定的,如果沒有,寫和追加。但是,如果cookie爲空,則只需將其添加到它即可。希望這可以幫助任何以session cookie和IE結束我的困境的人。