我将这段代码作为Google Tag Manager
中的javascript自定义变量。我想要面包屑内容。
这部分代码运行良好。但有些页面并没有面包屑,对于这些页面,我使用标题。因为我不想在谷歌分析维度中有未定义。
到目前为止,作为代码的一个单独部分,一切都还可以。但是,如果我试图检查breadcrumbs变量是否未定义(页面上没有breadcrumps类,而breadcrunds变量基于breadcrums类的内容(,我将无法检查这一点。"IF"语句就是不起作用。
我尝试了多种方法来检查变量(typeof,check value…(,但都不适用。
你能帮我吗?
function() {
var breadcrumbs = document.getElementsByClassName('breadcrumbs').item(0).innerText;
if (typeof breadcrumbs === 'undefined'){
breadcrumbs = {{JS - Title}}.substring(0, breadcrumbs.indexOf(' |'));
}else{
breadcrumbs = breadcrumbs.replace(/(?:rn|r|n)/g, '| ');
}
return breadcrumbs;
}
代码的问题是,当不存在breadcrumbs
类的元素时,breadcrumb
变量不会计算为undefined
,而是引发错误。然而,GTM捕获了这个错误,并作为整个函数(变量(的结果返回undefined。所以,你的if语句实际上根本没有被评估。
如果您直接从控制台运行代码,在控制台中不存在相关元素,则会得到一个错误:
var breadcrumbs = document.getElementsByClassName('breadcrumbs').item(0).innerText;
VM29:1未捕获类型错误:无法读取null的属性"innerText"时间:1:73
要克服这一问题,您应该分解获取相关元素的步骤,并相应地放置IF语句。例如
function() {
//get all breadcrumb elements
var breadcrumbElements = document.getElementsByClassName('breadcrumbs');
//check, if any elements are found
//if not, return title instead
if (breadcrumbElements.length === 0){
return {{JS - Title}};
}
//breadcrumb found
//return data from breadcrumb
return breadcrumbElements.item(0).innerText.replace(/(?:rn|r|n)/g, '| ');
}
请注意,我不明白为什么你引用breadcrumbs
变量,你希望它是未定义的:.substring(0, breadcrumbs.indexOf(' |'))
所以我跳过了这一部分,你可能需要调整它,以从{{JS - title}}
中获得期望值