8
votes

Problème Utilisation de Google Analytics avec Exigence.js

J'utilise exigence.js ( http://requirejs.org/ ) pour un certain nombre de fonctions sur Mon site et jusqu'à présent, cela semble bien fonctionner. Je rencontre un problème lorsque vous essayez d'inclure le code Google Analytics cependant. Le code semble refuser d'ajouter un fichier utm.gif et n'envoie pas une balise à Google. Je me demande si c'est une chose de portée.

define(function() {
    var Analytics = {};
    Analytics.Apply = function() {
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    _gaq.push(['_trackPageview']);

    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
}
return Analytics;
});


3 commentaires

Cela semble donc être un problème d'étendue. Lorsque vous utilisez le code:


(Bah, j'aimerais vraiment que l'entrée a donné une nouvelle ligne et une nouvelle chaîne + Entrée affichée, pas l'inverse ... et la boîte commente a mangé toutes mes pauses de la ligne!) Il semble donc que cela semble être un problème de portée. Lorsque vous utilisez le code: nécessitent (["jQuery"], fonction ($) {var foo = nécessite ('bar');}); console.log (foo); Je ne peux pas avoir accès à 'foo'. Je suppose que JavaScript va que cela a du sens puisque FOO n'existe que dans la portée des besoins. Je soupçonne bien que lorsque Ga.js est généré, il est à la recherche de _gaq, qui ne peut pas être trouvé puisqu'il est exigé. Des pensées?


Eh bien, je suis sûr que c'est impossible à lire.


5 Réponses :


5
votes

Voir ce Exigerjs Group thread pour une discussion sur la question.


0 commentaires

3
votes

Pour la dernière version de Google Analytics, l'extrait de code que j'utilise avec ExigenceJS est -

<script>
  window.GoogleAnalyticsObject = 'ga';
  window.ga = { q: [['create', 'UA-40327700-1', 'jspm.io'], ['send', 'pageview']], l: Date.now() };
  require(['http://www.google-analytics.com/analytics.js']);
</script>


0 commentaires

0
votes

Ici, nous allons:

define([ 'http://www.google-analytics.com/ga.js' ], function ( ga ) {
    ga = { q: [['create', 'UA-18710277-1', 'jspm.io'], ['send', 'pageview']], l: Date.now() };
});


0 commentaires

9
votes

Aucune des autres réponses n'a travaillé pour moi, mais j'ai réussi à trouver quelque chose qui fonctionne, après avoir lu Documentation Google Analytics .

Dans votre principale app.js code> p> xxx pré>

dans son propre fichier analytique.js CODE>: P>

define(['ga'], function () {
    window.ga('create', 'UA-XXXXXX-1');
    window.ga('send', 'pageview');
});


2 commentaires

Pourriez-vous s'il vous plaît dites-moi pourquoi il est window.ga et pas seulement GA ?


Vraiment simplement pour expliquer que nous utilisons un global. Le code d'analyse de Google ne s'inscrit pas en tant que module AMD. Nous n'avons donc pas un autre moyen de le faire référence. Il peut être possible d'utiliser une cale requisjs, je ne me souviens pas si j'avais essayé cela ou non.



0
votes

Les autres solutions ne fonctionnaient pas pour moi lors de l'utilisation du nouveau analytique.js code>. Mettre l'URL directement sous forme de dépendance n'a pas fonctionné, car les exigences ne pouvaient pas déterminer lorsque le script a fini de charger. Le plugin async pour EXCEXJS n'a pas semblé fonctionner pour moi non plus (bien que je l'utilise pour l'API Google Maps).

L'approche suivante a fonctionné pour moi: P>

define(function (require) {

  var module;

  // Setup temporary Google Analytics objects.
  window.GoogleAnalyticsObject = "ga";
  window.ga = function () { (window.ga.q = window.ga.q || []).push(arguments); };
  window.ga.l = 1 * new Date();

  // Immediately add a pageview event to the queue.
  window.ga("create", "{{TrackingID}}", "{{Domain}}");
  window.ga("send", "pageview");

  // Create a function that wraps `window.ga`.
  // This allows dependant modules to use `window.ga` without knowingly
  // programming against a global object.
  module = function () { window.ga.apply(this, arguments); };

  // Asynchronously load Google Analytics, letting it take over our `window.ga`
  // object after it loads. This allows us to add events to `window.ga` even
  // before the library has fully loaded.
  require(["http://www.google-analytics.com/analytics.js"]);

  return module;

});


0 commentaires