2015-05-14 19 views
2

我一直在尝试将Google跟踪代码管理器脚本添加到使用Squarespace开发的网站。不幸的是,谷歌的实施指南规定,应在开放的<body>标签后立即插入此脚本,这是Squarespace不允许的。因此,我一直在玩YUI库以尝试将此代码注入到它所需的位置。并有此:执行<Script>注入到DOM中的元素

<script> 
Y.use('node', function() { 
    Y.on('domready', function() { 
     obj = Y.Node.create('<!-- Google Tag Manager --><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-KPT4S5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>'+'<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],'+'j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\'//www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);'+'})(window,document,\'script\',\'dataLayer\',\'GTM-KPT4S5\');<\/script><!-- End Google Tag Manager -->'); 
     Y.one('body').prepend(obj); 
    }); 
}); 
</script> 

上面的代码将注入脚本在需要的地方,但它不会执行它。有人可以帮助确定为什么并可能提出解决方案吗?

顺便说一句,我知道我可以用jQuery实现这一点,但我不希望加载任何额外的库。

非常感谢。

N.B道歉,我原来的帖子不清楚。我没有访问Squarespace的源代码,我需要在开始<body>标记后直接插入GTM脚本。我可以在Squarespace的<head>中插入脚本,因此我尝试从那里将GTM代码注入<body>

回答

1

您可以使用document.write来执行已插入为DOM文本的内联脚本代码。因此,而不是

<script> 
Y.use('node', function() { 
    Y.on('domready', function() { 
     obj = Y.Node.create('<!-- Google Tag Manager --><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-KPT4S5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>'+'<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],'+'j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\'//www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);'+'})(window,document,\'script\',\'dataLayer\',\'GTM-KPT4S5\');<\/script><!-- End Google Tag Manager -->'); 
     Y.one('body').prepend(obj); 
    }); 
}); 
</script> 

你可以做

<script> 
document.write('<!-- Google Tag Manager --><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-KPT4S5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>'+'<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],'+'j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\'//www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);'+'})(window,document,\'script\',\'dataLayer\',\'GTM-KPT4S5\');<\/script><!-- End Google Tag Manager -->'); 
</script> 

编辑:如果JS是从你,你需要执行内联JS代码没有获得第三方来源你自己通过eval。你可以做同样的事情到这个

<script> 
Y.use('node', function() { 
    Y.on('domready', function() { 
     obj = Y.Node.create('<!-- Google Tag Manager --><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-KPT4S5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>'+'<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],'+'j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\'//www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);'+'})(window,document,\'script\',\'dataLayer\',\'GTM-KPT4S5\');<\/script><!-- End Google Tag Manager -->'); 
     obj.id="googleTag"; 
     Y.one('body').prepend(obj); 
     Y.one('#googleTag').all('script').each(function(s, k) { 
      var scriptSrc = s.getHTML(); 
      eval(scriptSrc); 
     }); 
    }); 
}); 
</script> 
+0

对不起,我不清楚。我没有访问Squarespace中的源代码,我需要在开始标记后直接插入GTM脚本。我可以将脚本插入到方块空间中的,以便从那里将它注入。 – Johntyb

0

尽管这个问题是一个年纪大一点,就可以在“页脚”区域中添加谷歌代码管理工具的代码Squarespace的代码注入部分。

具有管理员访问权,选择:在头

Settings -> Advanced -> Code Injection

将您的GTM脚本和<noscript>东西在页脚。

我知道这并不能解决在开始<body>标记后立即得到它的特殊观点,但我已经看到了这个建议(并且在Squarespace中完成的几个客户端站点上使用它)。

相关问题