在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
});
}*/
}
答案 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
});
}*/
}