谷歌标记管理器中的自定义Javascript返回undefined

时间:2017-03-22 13:08:19

标签: javascript google-tag-manager

在我的页脚中,我有一个div部分结构如下:

<div id="text_icl-7" class="widget widget_text_icl">        
<div class="textwidget">
<p style="text align:justify;">
<img src="image.jpg" alt="YC logo">
Some text
</p>
</div>
</div>

我希望将文本值捕获到变量中,所以我在gtm中写这个:

function () {
var desc = document.getElementById("text_icl-7").childNodes[1];
var p = desc.childNodes[1].childNodes[2];
return p;
}

问题是,调试页面时,变量的值是未定义的。 我在另一个自定义页面中尝试脚本并且它可以工作,我用这种方式编写脚本:

(function(d) {
var desc = document.getElementById("text_icl-7").childNodes[1];
var p = desc.childNodes[1].childNodes[2];
console.log(p)


})(document)

在控制台我获取文本但不在标签管理器中,为什么?感谢

3 个答案:

答案 0 :(得分:0)

我无法调试您获取未定义值的原因,但我怀疑自定义JavaScript变量不是您在此实例中所需的。

您可以使用Google跟踪代码管理器的“DOM变量”返回DOM元素中包含的文本。配置变量以使用CSS选择器选择与load data local infile "/home/marcio/Área de Trabalho/SQL_Temporario/Insetos/Blastn_1" into table Blastn_1; 匹配的元素。将'attribute'字段保留为空将默认返回元素包含的文本。

DOM Variable

答案 1 :(得分:0)

我得到了gtm论坛的帮助。 相关脚本是:

function() {
  var el = document.querySelector('#text_icl-7');
  return el && (el.textContent || el.innerText);
}

现在它可以工作,也许dom变量的解决方案也可行,谢谢

答案 2 :(得分:0)

很抱歉对此做出回应,但这是我的解决方案,您需要在脚本的开头定义变量,并在结尾处返回。下面的示例。

这不起作用:

function(){
  document.querySelectorAll('.some-class').forEach(function(item){
    var displayStyle = item.style.display;

    if (displayStyle === 'block'){
      return item.getAttribute('id');
    }
  })
}

但这可行:

function(){
  var result = '';
  document.querySelectorAll('.some-class').forEach(function(item){
    var displayStyle = item.style.display;

    if (displayStyle === 'block'){
      result = item.getAttribute('id');
    }
  })
  return result;
}