Найден этот поток при отладке устаревшего кода (который, возможно, фактически скопировал / вставил существующий ответ этого потока!) .
Я подумал, что добавлю несколько комментариев о связанной проблеме, которая привела меня сюда, чтобы никто другой с такой же проблемой не оказался здесь.
Код из ответа @ Yahel работал нормально, как написано, но когда я переписывал его в новый контекст, он иногда выдавал ошибку, которая убивала весь код, вызывающий этот контекст в Chrome, когда у человека не было любые файлы cookie Google Analytics на их компьютере.
Я преобразовал его в следующий код:
function getGATS(){
var pairs = (/(?:^|; )__utmz=([^;]*)/.exec(document.cookie)||[]).slice(1).pop().split('.').slice(4).join('.').split('|');
var vals = {};
for (var i = 0; i < pairs.length; i++) {
var temp = pairs[i].split('=');
vals[temp[0]] = temp[1];
}
return {
'utm_source': (vals.utmgclid) ? "google" : vals.utmcsr,
'utm_medium': (vals.utmgclid) ? "cpc" : vals.utmcmd,
'utm_campaign': vals.utmccn,
'utm_content': vals.utmcct,
'utm_term': vals.utmctr
};
}
Затем другая функция «добытчика» сделала это:
return $.extend({}, {
'is_constituent_checked' : $('#IsConstituent').is(':checked'),
'statuses' : getStatusesString()
}, getGATS());
Этот "getter" был вызван функцией "addHiddenInputs ()", которая перебрала его возвращаемое значение и добавила эти входы / значения в DOM. (Это для последующей обработки формы "onSubmit".)
=======
Оказывается, что когда пользователь, в среде Chrome которого не было файлов cookie GA ("alert (document.cookies);" не отображал значения "utm") пытался отправить мою форму, весь этот вызов addHiddenInputs () не смог выполнить свою работу.
Это потому, что первый вызов ".split ()" для "(/ (?: ^ |;) __ utmz = ([^;] ) /. Exec (document.cookie) | | []). slice (1) .pop () "* не работало, когда этот фрагмент оценивался как« неопределенный »(как в случае, когда нет файлов cookie Google Analytics).
Помещение тела функции внутри блока try {} и добавление «catch (err) {...}» (в моем случае, с «return {};» в качестве «» ... ") решил проблему.