如果我使用谷歌分析async site tracking script,在我页面的head部分的末尾,一切都按预期工作:
<head>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_setDomainName', 'test.com']);
_gaq.push(['_trackPageview', '/title=ied&action=fire']);
(function () {
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);
})();
</script>
</head>
在小提琴手中可以看到2个请求:
出于某种原因,我需要对脚本进行参数化,因此我将其包装在自定义googleAnalytics
函数中,该函数有2个参数:
function googleAnalytics(domain, queryString) {
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq.push(['_setDomainName', domain]);
_gaq.push(['_trackPageview', queryString]);
(function () {
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);
})();
}
Abowe代码已保存到 GoogleAnalytics.js 文件中。我把它加载到头部的页面,如下所示:
<head>
<script src="/script/GoogleAnalytics.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript">googleAnalytics('test.com', '/title=ied&action=fire');</script>
</head>
但是这次小提琴手只显示了一个请求:
Google Analytics Tracking Code Debugger也没有显示任何内容。 仅下载 ga.js 脚本,但没有其他请求填充Google Analytics分析报告的数据。这种方法有什么问题以及如何解决?
顺便说一下:我需要这2个参数和跟踪脚本的异步版本。
此致
答案 0 :(得分:2)
您的问题是您的_gaq
声明属于本地范围。 ga.js
加载,并在全局范围内查找_gaq
。 (一旦注入脚本,它就不再能够访问函数的范围。)
要修复它,您可以将var _gaq = _gaq || [];
放在函数之外,也可以在函数中替换它:
window._gaq = window._gaq || [];
这将解决您的问题。
答案 1 :(得分:0)
我已经做到了这一点。
GoogleAnalytics.js 看起来如下:
function googleAnalytics(domain, queryString) {
_gaq.push(['_setDomainName', domain]);
_gaq.push(['_trackPageview', queryString]);
}
虽然头部如下:
<head>
<script src="/script/GoogleAnalytics.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
(function () {
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);
})();
</script>
<script type="text/javascript">googleAnalytics('com.dev.abb.com','');</script>
</head>
此致