javascript - Google 跟踪代码管理器中的 JavaScript Try-Catch 错误

标签 javascript macros google-tag-manager

在 GTM(Google 跟踪代码管理器)中,您可以使用自定义 JavaScript 宏,它们是返回代码或规则使用的内容的匿名函数。

我的每个宏都使用 try/catch,因此我们可以轻松地发现任何实现错误(引发由 UA 标记捕获的 dataLayer 事件)

但是有一些奇怪的事情......如果我取消注释 try/catch,GTM 顽固地拒绝使用它并且不会给出任何错误......但进入永远保存模式(即浏览器一直在等待某些东西)。我知道当我在调试控制台中运行这段代码时它可以工作...并且我还有其他具有相同 try/catch 技术的宏...有什么想法吗?

function () {
    /*try {*/
        var v = '';
        // HTML5 video
        if(document.getElementsByTagName('video').length) v += 'video,';
        // Youtube video
        var i = document.getElementsByTagName('iframe');
        for(x = 0; x < i.length; x++)
            if(/youtube.com\/embed/.test(i[x].src)) {
                v += 'youtube,';
                break;
            }
            // Limelight video
        if(document.getElementsByClassName('LimelightEmbeddedPlayer')) v += 'limelight,';
        return v.length ? v.slice(0, -1) : v;
    /*} catch(e) {
        dataLayer.push({
            'event': 'error',
            'action': 'GTM',
            'label': '713-Video Type:' + e.message
        });
    }*/
}

最佳答案

您的问题破坏了 JavaScript 语法。 For 循环需要用大括号括起来,如果可能的话,请始终使用它们,例如如果。我建议使用JSHint至少时不时地测试您的代码是否存在语法错误。

我稍微修改了你的源代码,试试这个:

function () {
    /*try {*/
        var v = '';
        // HTML5 video
        if(document.getElementsByTagName('video').length) {
            v += 'video,';
        }
        // Youtube video
        var i = document.getElementsByTagName('iframe');
        for(var x = 0, l = i.length; x < l; x++) {
            if(/youtube\.com\/embed/.test(i[x].src) && !/youtube/.test(v)) {
                v += 'youtube,';
            }
            // Limelight video
        }
        if(document.getElementsByClassName('LimelightEmbeddedPlayer')) {
            v += 'limelight,';
        }
        return v.length ? v.slice(0, -1) : v;
    /*} catch(e) {
        dataLayer.push({
            'event': 'error',
            'action': 'GTM',
            'label': '713-Video Type:' + e.message
        });
    }*/
}

关于javascript - Google 跟踪代码管理器中的 JavaScript Try-Catch 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19864633/

相关文章:

javascript - 带有 localStorage 和 Google Analytics Ecommerce 的数据层

javascript - 使用命令检查 JavaScript 的语法

javascript - 接下来使用 jquery 查找 "nested"sibling

c++ - 用于空安全指针访问的 C/C++ 宏

mysql - 无法从不同区域的工作站连接到 MySQL 服务器

javascript - 通过 Google 标签管理器进行电子商务跟踪

google-analytics - 我无法使用 Google AdWords 再营销代码

javascript - 将显示值格式传递给 Angular 分量

javascript - 如何使用两个数组中的键创建 JS 对象?

function - 使用不同的表达式系统地调用 Common Lisp 宏