使用google analytics后pjax报错,提供我的修复方案

我使用的pjax版本是0.1.4,是通过npm直接安装的

npm install pjax

作者十分贴心,对google analytics都有考虑到。可惜有bug,我使用了google analytics后,在pjax切换页面完成后会得到异常:Cannot read property 'url' of undefined


解决办法

pjax.js中找到:

ga("send", "pageview", {"page": options.url, "title": options.title})

替换为:

ga("send", "pageview", {"page": location.pathname, "title": document.title})

解决过程

先来看看pjax.js中的代码:

this.options.analytics = this.options.analytics || function(options) {
// options.backward or options.foward can be true or undefined
// by default, we do track back/foward hit
// https://productforums.google.com/forum/#!topic/analytics/WVwMDjLhXYk
if (window._gaq) {
    _gaq.push(["_trackPageview"])
}
if (window.ga) {
    ga("send", "pageview", {"page": options.url, "title": options.title})
}

作者定义了analytics方法来触发google analyticspageview,options是参数,Cannot read property 'url' of undefined说明optionsundefined,继续顺藤摸瓜:

// Fire Events
Pjax.trigger(document,"pjax:complete pjax:success", options)

options.analytics()

找到异常原因,analytics()并没有带参数,所以方法中的options自然是undefined

于是我把options作为参数传入

options.analytics(options)

异常消失,可是,新问题又出现了urltitle均不存在options中,所以google analytics不能正确统计切换后的页面

还是简单地的处理好了:

ga一段改为:

ga("send", "pageview", {"page": location.pathname, "title": document.title})

测试成功,google analytics也得到了正确的信息。

若您觉得我的博文对您有帮助,欢迎点击下方按钮对我打赏
打赏