2016-11-30 75 views
0

我試圖捕捉「SKU」的值作爲GTM變量得到的值作爲變量。該值將在每個產品頁面上更改。谷歌標籤管理:經過特定的文本

頁上的代碼如下所示:

<script type="application/ld+json"> 
{ 
    "@context": "http://schema.org", 
    "@type": "Product", 
    "sku": "305FS-UJNA5", 
    "offers": [{ 
     "@type": "Offer", 
     "price": "99.00", 
     "availability": "InStock", 
     "priceCurrency": "USD" 
     }] 
} 
</script> 

變量預計將捕獲:305FS-UJNA5(不含雙引號)。

有沒有辦法通過使用自定義JavaScript變量類型,會爲"sku": "搜索頁面上,並返回值,直到下一個雙引號來做到這一點?

或者說,什麼什麼將是實現這一目標的最佳方式是什麼?

我嘗試了搜索,但在GTM不確定的回報......

function() { 
var content = document.body.innerText; 
var query=""sku": ""; 
if (content.search(query) > -1) { 
    return true; 
} else { 
    return false; 
    } 
} 
+0

爲什麼不利用GTM推,你需要到數據層的數據? (不是說你的方法是錯誤的,但是......只是拋出它,因爲你已經有了GTM。) – nyuen

+0

@nyuen如果它在dataLayer中,那將是太棒了。但是,如何讓GTM讀取305FS-UJNA5的值並將其推送到dataLayer? – joell

+0

您需要執行鍵/值對的'dataLayer.push'。如果不把它放在可能無助的答案中,我無法展示給你。但你可以通過Google數據層推送。你可以用一個'event'來完成,這樣GTM可以輕鬆地獲取數據並在你的標籤中使用它們。 – nyuen

回答

1

如果你願意接受一個hackish的解決方案

 <html> 
     <head> 
      <title></title> 
       <script type="application/ld+json"> 
     { 
      "@context": "http://schema.org", 
      "@type": "Product", 
      "sku": "305FS-UJNA5", 
      "offers": [{ 
       "@type": "Offer", 
       "price": "99.00", 
       "availability": "InStock", 
       "priceCurrency": "USD" 
       }] 
     } 
     </script> 
     </head> 
     <body> 
      <script>  
      json = {}; 
       scripts = document.getElementsByTagName('script'); 
       for (i = 0; i < scripts.length; ++i) { 
        script = scripts[i]; 
        if(script.getAttribute('type') != "application/ld+json") { 
         continue; 
        } 
        json = JSON.parse(script.childNodes[0].nodeValue); 
        datalayer.push({ // dl must be initialized before 
        'event':'skuCapture', 
        'sku': json.sku 
        }); 
       } 


      </script> 
     </body> 
     </html> 

這將加載腳本標記的內容到一個名爲「json」的變量中,您可以將其加載到全局js變量中或將單個屬性推送到數據層(即在示例json.sku中將保存sku)。如果您不在現有事件(例如Dom Ready)上執行此操作,則需要推送自定義事件以使GTM知道該值。

很明顯,你可以把腳本中的自定義HTML標籤(只要你的腳本標籤已經呈現後,其運行),如果你不能改變網頁的代碼。這只是一個工作的例子。

這適用於我在Chrome瀏覽器,它沒有與其他瀏覽器測試或副作用測試,所以你可能需要擴大這個想法,但它是可行的(即使它看起來很醜)。

其實這可以寫稍微更簡潔:

var scripts = document.querySelectorAll("[type='application/ld+json']"); 
    for (i = 0; i < scripts.length; ++i) { 
     script = scripts[i]; 
     json = JSON.parse(script.childNodes[0].nodeValue); 
     console.log(json.sku); 
    } 

只選擇與正確的類型屬性的腳本標記。如果你確切地知道你只有一個腳本標籤,你可以使用document.querySelector代替document.querySelectorAll並與環免除(因爲這將返回一個結果)。

+0

很好的答案!我想可能有另一種方式,但我猜不是。 – nyuen

+0

@nyuen,我真的希望有另一種方式,因爲那肯定不是一個美麗的解決方案 - 但它是我能找到的唯一解決方案。 –

+0

也許同樣如此,因爲OP不想涉及開發者。 – nyuen

相關問題