加载谷歌分析参数化异步页面跟踪脚本

时间:2011-07-05 11:40:33

标签: javascript google-analytics

如果我使用谷歌分析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个请求:

enter image description here enter image description here

出于某种原因,我需要对脚本进行参数化,因此我将其包装在自定义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>

但是这次小提琴手只显示了一个请求:

enter image description here

Google Analytics Tracking Code Debugger也没有显示任何内容。 仅下载 ga.js 脚本,但没有其他请求填充Google Analytics分析报告的数据。这种方法有什么问题以及如何解决?

顺便说一下:我需要这2个参数和跟踪脚本的异步版本。

此致

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>

此致