簡體   English   中英

在觸發之前,如何在下一頁進一步更改內聯腳本標簽

[英]How do I change an inline script tag further down page before it fires

我有一個電子商務感謝頁面,該頁面正在向Google Analytics(分析)發送ecommerce.js點擊

<script>
        try{ga('require', 'ecommerce', 'ecommerce.js');
        ga('ecommerce:addTransaction', {
            'id': '082918-074143-128'
            , 'affiliation': ''
            , 'revenue': '2.09'
            , 'shipping': '0.00'
            , 'tax': '0.17'
        });ga('ecommerce:addItem',{ 
            'id': '082918-074143-128'
            , 'sku': ''
            , 'name': 'Cane Creek 1-1/8-inch Headset Shim Spacer .25mm'
            , 'category': 'Bicycling Catalog > Components > Headsets'
            , 'price': '1.08'
            , 'quantity': '1'
        });

        ga('ecommerce:addItem',{ 
            'id': '082918-074143-128'
            , 'sku': ''
            , 'name': 'Race Face X-Type BB Outer Race Seal Gray'
            , 'category': 'Bicycling Catalog > Components > Other > Other'
            , 'price': '0.84'
            , 'quantity': '1'
        }); ga('ecommerce:send');}catch(err){}
</script> 

我想更改此腳本,然后再刪除第一行和最后一行,並通過將字符串'ga('更改為'ga1('來更改代碼,以使代碼不會將數據發送至GA。,這樣我就可以發送增強型電子商務匹配。

我在頁面上方插入了以下腳本,以便它將標簽編輯在頁面下方,但是在觸發之前無法編輯標簽。

我嘗試了這個:

<script>
  document.addEventListener("DOMContentLoaded", function(event) {

    function contains(selector, text) {
        var elements = document.querySelectorAll(selector);
        return [].filter.call(elements, function(element){
            return RegExp(text).test(element.textContent);
        });
    }
    function bsHit() {
        gaHit = contains('script', /try\{ga\(/g);
        var hit = gaHit[0].innerHTML;
        var tryer = "try{ga('require', 'ecommerce', 'ecommerce.js')\;";
        var hit = hit.replace(tryer, "");
        lastLine = "ga('ecommerce:send');}catch(err){}";
        hit = hit.replace(lastLine, "");
        hit = hit.replace(/ga\(/g,"ga1\(");
        console.log(hit);
    }

    bsHit();
  }
</script>

我需要/修改我的代碼來實現它嗎?

感謝您的寶貴時間和見解。

試試下面的代碼。 我不完全了解您的“包含”功能在做什么,所以我不能保證。 無論如何,如果您使用GA調試器Chrome擴展程序,則應該能夠查看代碼是否在自動生成的代碼之前執行,並從那里進行故障排除。

 <script> (function() { //this wraps your sript in an IIFE, which will execute as soon as it's parsed function contains(selector, text) { var elements = document.querySelectorAll(selector); return [].filter.call(elements, function(element) { return RegExp(text).test(element.textContent); }); } function bsHit() { var gaHit = contains('script', /try\\{ga\\(/g); var hit = gaHit[0].innerHTML; hit = hit.replace("ga('ecommerce:send')", ""); gaHit[0].innerHTML = hit; //var hit is just a string - you need to rewrite the script element console.log("Replaced script content:\\n" + hit); //added string so it will show up on console even if 'hit' is null } bsHit(); })(); </script> 

您可以暫時將ga函數與其他函數一起使用嗎?

 window.ga1 = window.ga; window.ga = function(){}; setTimeout(function(){ window.ga = window.ga1; }, 3000); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM