こんにちは、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の終了後にロードされるため、問題にはなりません。
私はこの問題を徹底的にグーグルで調べ、私の会社の他の数人の開発者にさえアプローチしました、そして私たち全員は困惑しています。前もって感謝します!