Я пытаюсь использовать файл cookie, чтобы установить количество просмотров страниц за сеанс через GTM. Я использую пользовательскую переменную JavaScript:
function readCookie(name) {
var cookieName = name + " = ";
var cookieSplit = document.cookie.split(';');
for (var i = 0; i < cookieSplit.length; i++) {
var cookies = cookieSplit[i];
while (cookies.charAt(0) === ' ') cookies = cookies.substring(1, cookies.length);
if (cookies.indexOf(cookieName) === 0) return cookies.substring(cookieName.length, cookies.length);
}
return null;
}
function viewAppend() {
var oldCookie = readCookie('viewCount');
if (oldCookie === null) {
document.cookie = "viewCount=1; path=/";
} else {
var views = oldCookie + 1;
document.cookie = "viewCount = "+views+"; path=/";
}
}
viewAppend();
Я получаю ту же ошибку компилятора: «Ошибка в строке 12, символ 1: ошибка синтаксического анализа. ')' Ожидается».
Кажется, я не могу понять, что делаю не так, но любая помощь приветствуется.
------ РЕДАКТИРОВАТЬ ------ В моем комментарии ниже это мой текущий код. Текущая ошибка: «Ошибка в строке 16, символ 40: ошибка синтаксического анализа. Ожидается точка с запятой».
function doStuff() {
function readCookie(name) {
var cookieName = name + " = ";
var cookieSplit = document.cookie.split(';');
for(var i=0;i < cookieSplit.length;i++) {
var cookies = cookieSplit[i];
while (cookies.charAt(0) === ' ') cookies = cookies.substring(1,cookies.length);
if (cookies.indexOf(cookieName) === 0) return cookies.substring(cookieName.length,cookies.length);
}
return null;
}
function viewAppend() {
var oldCookie = readCookie('viewCount');
if (oldCookie === null) {
document.cookie = "viewCount = "1"; path=/";
} else {
var views = parseInt(oldCookie) + 1;
document.cookie = "viewCount = "+views+"; path=/";
}
}
}
Извините, что это была опечатка с моей стороны. Там была полуколоние. Думаю, я сузил круг вопросов до двух. 1) Я думаю, что GTM заставит меня обернуть все в одну функцию. 2) Мне нужно преобразовать oldCookie обратно в целое число, чтобы добавить 1 перед перезаписью файла cookie. Я собираюсь отредактировать оригинал своим текущим кодом.
16 - это инструкция else



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У вас есть проблемы с цитированием в этой строке:
document.cookie = "viewCount = "1"; path=/";
так должно быть:
document.cookie = "viewCount=1; path=/";
Вам не нужно заключать в кавычки значение cookie (и если вы это сделали, вы можете либо избежать их, либо использовать одинарные кавычки вокруг всей строки).
Это сделало это ... или помогло мне избавиться от ошибок. Переменная по-прежнему отображается как неопределенная в Window Loaded, но я полагаю, что могу исправить это, вернув представления var?
Правильно, пользовательская переменная JS должна возвращать значение. views должен делать
@AndrewRansom Какая переменная отображается как неопределенная?
@Barmar Я пошел другим путем, и он работает нормально. Я разместил свой ответ ниже. Спасибо!
Хорошо, я вернулся к чертежной доске и попытался решить проблему другим способом. Сначала я пытался собрать все в одну настраиваемую переменную JavaScript в GTM. Это было глупо. Я решил подойти к этому так:
Во-первых, я создал собственный HTML-тег в GTM для чтения / записи файла cookie PageView, который запускается на всех страницах.
<script>
function readCookie(name) {
var cookieName = name + " = ";
var cookieSplit = document.cookie.split(';');
for(var i=0;i < cookieSplit.length;i++) {
var cookies = cookieSplit[i];
while (cookies.charAt(0) === ' ') cookies = cookies.substring(1,cookies.length);
if (cookies.indexOf(cookieName) === 0) return cookies.substring(cookieName.length,cookies.length);
}
return null;
}
function viewAppend() {
var oldCookie = readCookie('viewCount');
if (oldCookie === null) {
document.cookie = "viewCount=1; path=/";
} else {
var views = parseInt(oldCookie) + 1;
document.cookie = "viewCount = "+views+"; path=/";
}
}
viewAppend();
</script>
Затем я создал пользовательскую переменную Javascript, которая считывает файл cookie и возвращает его как целое число.
function doStuff() {
function readCookie(name) {
var cookieName = name + " = ";
var cookieSplit = document.cookie.split(';');
for(var i=0;i < cookieSplit.length;i++) {
var cookies = cookieSplit[i];
while (cookies.charAt(0) === ' ') cookies = cookies.substring(1,cookies.length);
if (cookies.indexOf(cookieName) === 0) return cookies.substring(cookieName.length,cookies.length);
}
return null;
}
var oldCookie = readCookie('viewCount');
var views = parseInt(oldCookie);
return views;
}
Затем я просто создал свой тег pagievew, который срабатывает всякий раз, когда значение переменной pageviews превышает 4 при загрузке окна, чтобы указать на заинтересованного пользователя.
Спасибо @Barmar за помощь в размышлении над проблемой. Ваши вопросы определенно бросили вызов тому, как я к этому подходил.
Может быть, GTM не поддерживает автоматическую вставку точки с запятой? Попробуйте добавить
;в конец строкиvar oldCookie.