2017-01-23 31 views
4

我有一個Aurelia CLI應用到這我想包括德Google Tag Manager腳本谷歌代碼管理工具,requirejs和奧裏利亞CLI

<head> 
    <!-- Google Tag Manager --> 
    <!--<script> 
     var dataLayer = []; 
     dataLayer.push({ 'event': 'hixo' }); 
    </script> 
    <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 = 
      'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 
     })(window, document, 'script', 'dataLayer', 'GTM-PLSZRC'); 
    </script>--> 
    <!-- End Google Tag Manager --> 
</head> 

但只要我啓動應用程序,我得到以下requirejs錯誤:

"Mismatched anonymous define() modules" 

Aurelia酒店CLI使用requirejs,但它是完全抽象的話,在哪裏,我應該如何定義谷歌標籤管理腳本,以便它不爲匿名模塊處理?

回答

2

當您在加載google標籤管理器腳本後第一次使用dataLayer.push()時,GTM將加載其他腳本。這些腳本是異步加載的,因此這些腳本將在之後完成加載aurelia-cli包(以及此包中的requirejs)已加載。這就是爲什麼RequireJS抱怨匿名定義錯誤,即使GTM腳本標籤包含之前 aurelia-cli包。

由Google跟蹤代碼管理器加載的其中一個腳本是來自this URL的Fingerprint2。目前這是Fingerprint2的1.4.1版本,並且在GitHub存儲庫中有this issue提及相同的Mismatched anonymous define()錯誤。這似乎是由this PR修復的,但由於Google Tag Manager加載Fingerprint2(並且我們無法重寫此行爲),因此我們需要一種解決方法才能使其運行。

一種解決方法就是自己同步使用腳本標籤,然後告訴RequireJS忽略Mismatched anonymous define()錯誤從谷歌代碼管理加載源自Fingerprint2第二次加載Fingerprint2:

<script src="http://www.clickcease.com/monitor/stat.js"></script> 
<script src="scripts/vendor-bundle.js" data-main="aurelia-bootstrapper"></script> 
<script> 
    requirejs.onError = function (err) { 
    if (err.message.indexOf('Fingerprint2') === -1) { 
     throw err; 
    } 
    }; 
</script> 

希望Clickcease將更新他們的版本Fingerprint2很快就會使這種解決方法不再是必需的。