2015-05-14 24 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中完成的幾個客戶端站點上使用它)。

相關問題