我一直在尝试将Google跟踪代码管理器脚本添加到使用Squarespace开发的网站。遗憾的是,Google实施指南指定应在打开< body>
标记后立即插入此脚本,而Squarespace不允许这样做。
因此,我一直在玩YUI库,试图将此代码注入到需要的地方。并拥有:


 < 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&gt ;(函数(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 = \ '+ 1:\' \ '; j.async = TRUE; j.src = \' // www.googletagmanager.com/gtm.js?id=\'+i+dl ; f.parentNode.insertBefore(J,F); '+'})(窗口,文件,\ '脚本\' \ '数据层\' \ 'GTM-KPT4S5 \');< \ /脚本>&LT ; - 结束Google跟踪代码管理器 - >');
 Y.one('body')。prepend(obj);
});
});&#xA ;< / script>



 上面的代码会在需要时注入脚本,但它不会执行它。有人可以帮助确定原因并可能建议一个解决方案吗?


顺便说一句,我知道我可以用jQuery实现这个目标,但我不希望加载任何其他库。非常感谢。


 NB道歉,我在原帖中并不清楚。我无权访问Squarespace中的源代码,我需要在打开< body>
标记后直接插入GTM脚本。我可以在Squarespace的< head>
中插入脚本,所以我尝试将GTM代码从那里注入< body>
。
答案 0 :(得分: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来自您无权访问的第三方来源,则需要通过eval自行执行内联JS代码。你可以做类似的事情
<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>
答案 1 :(得分:0)
虽然这个问题有点陈旧,但可以在“页脚”区域的Squarespace的“代码注入”部分添加Google跟踪代码管理器的代码。
使用管理员权限,选择:
Settings -> Advanced -> Code Injection
将GTM脚本放在标题中,将<noscript>
内容放在页脚中。
我知道这并没有解决关于在开始<body>
标记之后立即获取它的特定点,但我已经看到了这个(并且我自己在一些在Squarespace中完成的客户端站点上使用它)。