我正在使用require.js(http://requirejs.org/)来访问我网站上的许多功能,到目前为止,它似乎运行良好。在尝试包含Google Analytics代码时,我遇到了一个问题。该代码似乎拒绝添加utm.gif,并且没有向Google发送信标。我想知道这是不是范围之物。
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;
});
ga.debug不会抛出任何错误,并且不会出现utm.gif。如果我将代码移到require.js之外(我的意思是模块化的javascript使用require.js,所以只需将其内联添加到页面中),utm.gif就会成功添加到页面中,ga.debug会发送它的信标。
我发现这个网站似乎成功使用了它,但我不确定该网站的用途是什么:http://paceyourself.net/2011/05/14/managing-client-side-javascript-with-requirejs/
其他任何人遇到组合require.js和GA的问题?
答案 0 :(得分:9)
其他答案都没有对我有用,但在阅读Google Analytics documentation之后,我设法找出了有效的方法。
在您的主app.js
requirejs.config({
paths: {
ga: '//www.google-analytics.com/analytics'
}
});
requirejs(['analytics'], function () {
...
});
在自己的文件analytics.js
中:
define(['ga'], function () {
window.ga('create', 'UA-XXXXXX-1');
window.ga('send', 'pageview');
});
这是有效的,因为requirejs保证在函数执行时,analytics.js
将完成加载。这意味着window.ga
函数已准备好接受命令。
答案 1 :(得分:5)
有关此问题的讨论,请参阅此requirejs group thread。
答案 2 :(得分:3)
对于最新版本的Google Analytics,我与RequireJS一起使用的代码段是 -
<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>
答案 3 :(得分:0)
我们走了:
define([ 'http://www.google-analytics.com/ga.js' ], function ( ga ) {
ga = { q: [['create', 'UA-18710277-1', 'jspm.io'], ['send', 'pageview']], l: Date.now() };
});
这是我目前正在使用的模块,请提示@ user2305274
答案 4 :(得分:0)
使用较新的analytics.js
时,其他解决方案对我不起作用。直接将URL作为依赖项放置不起作用,因为requirejs无法确定脚本何时完成加载。 requirejs的异步插件似乎对我不起作用(虽然我将它用于谷歌地图api)。
以下方法对我有用:
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;
});