在带有 querySelectors 的 Google 跟踪代码管理器中使用 IF 条件

Using IF conditional in Google Tag Manager with querySelectors

问题

继续获取 'undefined' 作为 returned google 标签管理器变量。

描述

我正在尝试编写一个自定义 javascript 变量来提取 'data-name' IF 'data-form-title' returns ""

我有一个要标记的网站,需要获取表单名称。问题出现了,一些表单的名称返回为“”,所以我想使用 IF/Then 逻辑在第一个返回为空时选择另一个属性。

具有正确表单标题的表单https://www.mcgeetoyotaofclaremont.com/popup-availability

表单标题为空 "" ('text yourself a link') https://www.mcgeetoyotaofclaremont.com/vehicle-details/new-2020-toyota-yaris-hatchback-le-claremont-nh-id-33375400#

我试过的

我已经测试了两个 querySelectors,它们都可以独立工作。当我尝试使 运行 成为问题的 IF 条件时。

我也试过 var answer = 'Unknown' 然后根据条件用 formtitledatatitle 替换变量,这样脚本只有 1 return在函数中。

对我来说这似乎很简单,当我 cross-check 其他示例(例如从函数中取出名称)时,它似乎应该可以正常工作。

当前代码

function() {

var formtitle = document.querySelectorAll('form[data-form-title]')[0].attributes['data-form-title'].nodeValue;

var datatitle = document.querySelectorAll('form[data-form-title]')[0].attributes['data-name'].nodeValue;


if (formtitle != ""){
    return formtitle;
    } else {
    return datatitle;
    }   
}

当我尝试 运行 您表单上的当前代码时,出现错误:Uncaught TypeError: Cannot read property 'nodeValue' of undefined。此错误会使您的 GTM 函数 return 每次都未定义。

问题似乎是这行代码:

var datatitle = document.querySelectorAll('form[data-form-title]')[0].attributes['data-name'].nodeValue;

没有 data-name 属性。所以你要么需要确保你正在尝试访问正确的属性,要么你可以像这样简单地将你的变量包围在 try-catch 块中:

function() {
  var formtitle = document.querySelectorAll('form[data-form-title]')[0].attributes['data-form-title'].nodeValue;

  var datatitle = '';
  try{
    datatitle = document.querySelectorAll('form[data-form-title]')[0].attributes['data-name'].nodeValue;
  }catch(err){}


  if (formtitle != ""){
    return formtitle;
  } else {
    return datatitle;
  }   
}