1

我将这段代码作为Google Tag Manager. 我想获得面包屑内容。

这部分代码运行良好。但是有些页面没有面包屑,对于这些页面我使用标题。因为我不想在 Google Analytics 维度中有未定义。

到目前为止,一切都可以作为代码的单独部分。但是如果我尝试检查面包屑变量是否未定义(页面上没有面包屑类并且面包屑变量是基于面包屑类的内容),我将无法检查这一点。“如果”语句不起作用。

我尝试了多种方法来检查变量(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(/(?:\r\n|\r|\n)/g, '| '); 
    }

    return breadcrumbs;
}
4

1 回答 1

0

您的代码的问题是,当不存在具有类的元素时,该breadcrumb变量未评估为undefined,但会引发错误。breadcrumbs然而,GTM 捕捉到这个错误,并返回 undefined 作为整个函数(变量)的结果。因此,您的 if 语句实际上根本没有被评估。

如果您直接从控制台运行代码,其中不存在相关元素,则会出现错误:

var breadcrumbs = document.getElementsByClassName('breadcrumbs').item(0).innerText;

VM29:1 未捕获的类型错误:无法在 :1:73 读取 null 的属性“innerText”

为了克服这个问题,您应该分解获取相关元素的步骤,并相应地放置 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(/(?:\r\n|\r|\n)/g, '| '); 

}

请注意,我无法弄清楚为什么您引用breadcrumbs变量,您希望它在哪里未定义:.substring(0, breadcrumbs.indexOf(' |'))所以我跳过了这部分,您可能需要调整它以从中获取预期值{{JS - title}}

于 2019-11-16T10:50:19.133 回答