Ошибка компилятора JavaScript в Диспетчере тегов

Я пытаюсь использовать файл 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=/";
        }
    }
}

Может быть, GTM не поддерживает автоматическую вставку точки с запятой? Попробуйте добавить ; в конец строки var oldCookie.

Barmar 31.05.2018 02:56

Извините, что это была опечатка с моей стороны. Там была полуколоние. Думаю, я сузил круг вопросов до двух. 1) Я думаю, что GTM заставит меня обернуть все в одну функцию. 2) Мне нужно преобразовать oldCookie обратно в целое число, чтобы добавить 1 перед перезаписью файла cookie. Я собираюсь отредактировать оригинал своим текущим кодом.

Andrew Ransom 31.05.2018 03:09

16 - это инструкция else

John Vandivier 31.05.2018 03:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
420
2

Ответы 2

У вас есть проблемы с цитированием в этой строке:

        document.cookie = "viewCount = "1"; path=/";

так должно быть:

        document.cookie = "viewCount=1; path=/";

Вам не нужно заключать в кавычки значение cookie (и если вы это сделали, вы можете либо избежать их, либо использовать одинарные кавычки вокруг всей строки).

Это сделало это ... или помогло мне избавиться от ошибок. Переменная по-прежнему отображается как неопределенная в Window Loaded, но я полагаю, что могу исправить это, вернув представления var?

Andrew Ransom 31.05.2018 03:37

Правильно, пользовательская переменная JS должна возвращать значение. views должен делать

vinoaj 31.05.2018 12:36

@AndrewRansom Какая переменная отображается как неопределенная?

Barmar 31.05.2018 17:38

@Barmar Я пошел другим путем, и он работает нормально. Я разместил свой ответ ниже. Спасибо!

Andrew Ransom 01.06.2018 04:11

Хорошо, я вернулся к чертежной доске и попытался решить проблему другим способом. Сначала я пытался собрать все в одну настраиваемую переменную 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 за помощь в размышлении над проблемой. Ваши вопросы определенно бросили вызов тому, как я к этому подходил.

Другие вопросы по теме