0

こんにちは、StackOverflowユーザーです。APIからデータベースに保存されるセッションCookieの1つにA/Bテスト情報を追加するための小さなスクリプトを作成しました。このスクリプトは、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」の文字列をacqsourcecookieに追加します。ただし、getCookie関数を実行しようとすると、IEは次のいずれかを実行します。a)それを見つけることができない、またはb)存在しないと言っている(そうあるべきですが、ページはロード時にそのCookieを作成します)。これはすべてDOMの終了後にロードされるため、問題にはなりません。

私はこの問題を徹底的にグーグルで調べ、私の会社の他の数人の開発者にさえアプローチしました、そして私たち全員は困惑しています。前もって感謝します!

4

1 に答える 1

0

だから、私はこれを理解しました。私がクッキーをチェックしていた方法は、があったかどうかをチェックすることでした=。これが問題でした。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を追加するだけです。これが、セッションCookieとIEで私の苦境に陥った人に役立つことを願っています。

于 2013-01-14T18:35:50.327 に答える