2017-01-23 1 views
4

Ich habe eine Aurelia CLI Anwendung, in die ich de Google Tag Manager SkripteGoogle Tag Manager, requirejs und die Aurelia 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> 

Aber sobald ich die Anwendung starten zu schließen versuche ich die folgende requirejs Fehlermeldung erhalten:

"Mismatched anonymous define() modules" 

die Aurelia CLI verwendet requirejs, aber es ist ganz so, wo und wie soll ich definieren den Google Tag Manager Script abstrahiert, so dass sie nicht als anonymes Modul behandelt wird?

Antwort

2

Wenn Sie nach dem Laden des Google Tag Manager-Skripts zum ersten Mal dataLayer.push() verwenden, lädt GTM zusätzliche Skripts. Diese Skripte werden asynchron geladen, so dass diese Skripte das Laden von beenden, nachdem das aurelia-cli-Paket (und requirejs, das in diesem Paket enthalten ist) geladen wurde. Deshalb beschwert sich RequireJS über den anonymen Definitionsfehler, obwohl das GTM-Skript-Tag vor dem aurelia-cli-Bündel enthalten ist.

Eines der von Google Tag Manager geladenen Skripts ist Fingerprint2 von this URL. Derzeit ist dies die Version 1.4.1 von Fingerprint2, und im GitHub-Repository gibt es this issue, die denselben Mismatched anonymous define() Fehler enthält. Es scheint von this PR behoben, aber da Google Tag Manager Fingerprint2 lädt (und wir können dieses Verhalten nicht überschreiben) benötigen wir eine Abhilfe, um es zu funktionieren.

Eine Abhilfe ist Fingerprint2 sich synchron mit einem Skript-Tag zu laden und dann RequireJS erzählen die Mismatched anonymous define() Fehler Ursprung von Google Tag Manager Laden Fingerprint2 zweiten Mal zu ignorieren:

<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> 

Hoffentlich Clickcease aktualisiert ihre Version Fingerprint2 bald, so dass diese Problemumgehung nicht mehr notwendig ist.