如何在Hot Towel durandal SPA +打字稿中使用Google通用分析

时间:2014-05-29 14:56:13

标签: google-analytics typescript single-page-application durandal-2.0 durandal-navigation

我正在建立基于热毛巾模板的应用程序。 谷歌分析遇到问题。 我完全是新的,这是我到目前为止所做的:

1)在Google Analytics(分析)帐户中注册

2)在关闭我粘贴的标签之前的index.cshtml文件中:

 <script>
    (function (i, s, o, g, r, a, m) {
        i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * new Date(); a = s.createElement(o),
        m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
</script>

3)从nuget到shell.ts文件中添加了TypeScript定义(我将其重写为TypeScript)

/// <reference path="../../scripts/typings/google.analytics/ga.d.ts" />

版本是0.0.9。

后来激活方法:

        this.router.on('router:navigation:complete', (instance, instruction) => {
         ga('create', 'UA-XXXXX-1', { 'cookieDomain': 'none' });
         ga('send', 'pageview');
    });

但是无法编译文件 - ga.d.ts中的ga对象定义没有声明任何函数 - 只有属性。

我做了一些研究并找到了可行的解决方案:

        var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-51465809-1']);
    _gaq.push(['_setCookieDomain', 'none']);
    _gaq.push(['_gat._anonymizeIp']);
    _gaq.push(['_trackPageview']);
    _gaq.push(['_setAllowLinker', true]);
    _gaq.push(['_setAllowHash', false]);
    _gaq.push(() => {
        var tracker = _gat._getTrackerByName('UA-51465809-1');
        tracker._trackPageview();
    });

但它似乎适用于以前的Google Analytics版本 - 而不是最新的版本。

尝试使用网站http://petermorlion.blogspot.com/2014/04/using-google-analytics-in-durandal-spa.html的信息但没有成功 - ga.d.ts中的ga对象定义没有声明任何函数。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

这是我在shell.ts中的激活逻辑:

 activate = () => {
    ko.validation.configure({
        registerExtenders: true,
        messagesOnModified: false,
        decorateElement: true,
        errorElementClass: 'error',
        messageTemplate: 'errorMessageTemplate',
        errorMessageClass: 'error',
        decorateInputElement: true
    });



    return m_dataservice.DataServiceInstance.primeData()
        .then(this.boot)
        .fail(this.failedInitialization);
}

boot = () => {
    m_dataservice.DataServiceInstance.getHelpLink().then((data) => { this.helpLink = data.results; });
    m_dataservice.DataServiceInstance.getFooterLinks().then((data) => {
        this.tmpLinki(data.results);
    });


    var routes = [
        { route: '', moduleId: 'home', title: 'My Apps', nav: true, customBind: false },
        { route: 'appcatalog', moduleId: 'appcatalog', title: 'App Catalog', nav: true, customBind: false },
        { route: 'aboutus', moduleId: 'aboutus', title: 'About Us', nav: true, customBind: false },
        { route: 'faq', moduleId: 'faq', title: 'FAQ', nav: true, customBind: false },
        { route: 'login', moduleId: 'login', title: 'Login', nav: true, customBind: false }
    ];


    this.router.on('router:route:not-found', function(fragment) {
        this.logError('No Route Found', fragment, true);
    });

    this.router.on('router:navigation:complete', (instance, instruction) => {
        ga('create', 'UA-XXXX-Y', { 'cookieDomain': 'none' });
        ga('send', 'pageview');
    });



   var tmp = this.router.makeRelative({ moduleId: 'viewmodels' }) 
       .map(routes) 
       .buildNavigationModel(); 
   return tmp.activate(); 

}

以'ga'开头的行以红色加下划线 - '无法调用类型缺少调用签名的表达式。