Javascript会话cookie不在IE9中编写

时间:2013-01-11 17:06:54

标签: javascript session-cookies

您好Stack Overflow用户。我已经创建了一个很好的小脚本,可以将API中的A / B测试信息附加到我们的一个会话cookie中,以存储在我们的数据库中。这个脚本适用于所有浏览器,但IE(惊喜!)。这是代码:

<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 cookie。然而,当它执行getCookie函数时,IE要么:a)找不到它,要么b)说它不存在(它应该,页面在加载时创建该cookie)。这是在DOM完成后加载的,所以这不是问题。

我已经详尽地搜索了这个问题,甚至找到了我公司的其他几个开发人员,我们所有人都很难过。提前谢谢!

1 个答案:

答案 0 :(得分:0)

所以,我已经弄明白了。我检查cookie的方式是检查是否有=。这就是问题,因为IE设置会话cookie的方式,如果cookie为null,则返回为未定义,因为该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为空,则只需将其添加到其中即可。希望这可以帮助任何最终陷入困境的人使用会话cookie和IE。