在带有查询选择器的Google跟踪代码管理器中使用条件式

时间:2019-12-10 21:50:25

标签: javascript google-tag-manager

问题

继续获取“未定义”作为返回的Google跟踪代码管理器变量。

说明

我正在尝试编写一个自定义javascript变量来提取'data-name' 如果'data-form-title'返回“”

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

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

的表单

具有空的“”表单标题的表单(“为您自己输入链接的文字” https://www.mcgeetoyotaofclaremont.com/vehicle-details/new-2020-toyota-yaris-hatchback-le-claremont-nh-id-33375400#

我尝试过的事情

我已经测试了两个querySelector,它们都可以独立工作。当我尝试使IF条件出现问题时。

我还尝试了var answer = 'Unknown',然后根据条件将变量替换为formtitledatatitle,以使脚本在函数中仅返回1。

对于我来说,这似乎很简单,当我交叉检查其他示例(例如从函数中删除名称)时,它似乎应该可以正常工作。

当前代码

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;
    }   
}

1 个答案:

答案 0 :(得分:1)

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

问题似乎是这行代码:

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;
  }   
}