在Google标记管理器中检查变量是否未定义



我将这段代码作为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}}中获得期望值

相关内容

  • 没有找到相关文章

最新更新