Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标记管理器中的JavaScript编译器错误_Javascript_Cookies_Google Tag Manager - Fatal编程技术网

标记管理器中的JavaScript编译器错误

标记管理器中的JavaScript编译器错误,javascript,cookies,google-tag-manager,Javascript,Cookies,Google Tag Manager,我正在尝试使用cookie通过GTM设置每个会话的用户页面浏览量。我正在使用一个自定义JavaScript变量: function readCookie(name) { var cookieName = name + "="; var cookieSplit = document.cookie.split(';'); for (var i = 0; i < cookieSplit.length; i++) { var cookies = cookie

我正在尝试使用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();
函数readCookie(名称){
var cookieName=name+“=”;
var cookieSplit=document.cookie.split(“;”);
对于(var i=0;i
我一直收到相同的编译器错误:“第12行的错误,字符1:解析错误。”)“应为。”

我似乎不知道我做错了什么,但任何帮助都是感激的

------编辑------ 通过我下面的评论,这是我当前的代码。当前错误为:“第16行错误,字符40:解析错误。应为分号”

函数doStuff(){
函数readCookie(名称){
var cookieName=name+“=”;
var cookieSplit=document.cookie.split(“;”);
for(var i=0;i
您在这一行有报价问题:

        document.cookie = "viewCount="1"; path=/";
应该是:

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

您不需要在cookie的值周围加引号(如果加了引号,您可以对其进行转义,也可以对整个字符串使用单引号)。

好的,我回到绘图板上,尝试以另一种方式解决问题。起初,我试图将所有内容构建到GTM中的单个自定义JavaScript变量中。那是愚蠢的。我决定这样做:

首先,我在GTM中构建了一个自定义HTML标记,用于读取/写入在所有页面上激发的PageView cookie

<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>

函数readCookie(名称){
var cookieName=name+“=”;
var cookieSplit=document.cookie.split(“;”);
for(var i=0;i
然后,我构建了一个自定义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;
}
函数doStuff(){
函数readCookie(名称){
var cookieName=name+“=”;
var cookieSplit=document.cookie.split(“;”);
for(var i=0;i
然后,我简单地构建了PagView标记,每当窗口加载时pageviews变量大于4时就会触发该标记,以指示参与的用户


感谢@Barmar帮助我们思考这个问题。你的问题肯定对我的做法提出了挑战。

也许GTM不会自动插入分号?尝试添加一个
var oldCookie
行的末尾。很抱歉,这是我的输入错误。分号在那里。我想我已经把范围缩小到了两个主要问题。1) 我认为GTM将迫使我在一个函数中包装所有内容。2) 我需要将oldCookie转换回整数,以便在重写cookie之前添加1。我将用我当前的代码编辑原始代码。16是else语句吗。。。或者让我克服了错误。在加载的窗口中,变量仍然显示为未定义,但我想我可以通过返回views变量来解决这个问题?没错,JS自定义变量需要返回一个值<代码>视图
应do@AndrewRansom什么变量显示为未定义?@Barmar我用了另一种方法,它工作正常。我把答案贴在下面。谢谢
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;
}