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

时间:2013-11-08 17:04:28

标签: 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
        });
    }*/
}

1 个答案:

答案 0 :(得分:1)

您的问题破坏了JavaScript语法。 For-loop需要在它周围支撑,如果可能的话,总是使用它们。 IFS。我建议至少每隔一段时间使用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
        });
    }*/
}