2012-10-06 119 views
0

我见过很多文章解释如何将Google分析与您的JQM网站集成,但似乎并没有为我工作。 我正在使用JQM版本1.2,并有一个包含此代码的外部JavaScript文件:jQuery Mobile和Google Analytics

var _gaq = _gaq || []; _gaq.push(['_ setAccount','UA-12345678-9']);

(函数(){风险GA =使用document.createElement( '脚本'); ga.type = '文本/ 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);})(); 。

$( '[数据角色=页]')生活( 'pageshow',函数(事件,UI){ 尝试{ 哈希=的location.hash; 如果(哈希& & hash.length> 1){ _gaq.push([ '_ trackPageview的',hash.substr(1)]);} 否则{ _gaq.push([ '_ trackPageview的']);} }赶上(ERR){ }} );

你能发现为什么这不起作用吗? 我是否需要在每个页面上内联加载代码,而不是将其放在外部文件中?

回答

1

你必须触发页面浏览到“pageshow”事件。

参见:http://roughlybrilliant.com/jquery_mobile_best_practices#7

试试这个:

var _gaq = _gaq || []; 

    $(document).ready(function(e) { 
     (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); 
     })(); 
}); 

    $('[data-role=page]').live('pageshow', function (event, ui) { 
     try { 
      _gaq.push(['_setAccount', 'YOUR_ANALYTICS_ID_GOES_HERE']); 

      if ($.mobile.activePage.attr("data-url")) { 
       _gaq.push(['_trackPageview', $.mobile.activePage.attr("data-url")]); 
      } else { 
       _gaq.push(['_trackPageview']); 
      } 
     } catch(err) {} 

    }); 

如果你把上面的代码在一个外部文件,确保该代码将在适当的时间(运行JQM和页面后被加载)...更好地将此代码附加到主HTML文件的末尾。

+0

感谢乌德,但我仍然无法得到它的工作。我试过在我的页面的部分添加文档就绪部分,并在结束标记之前添加了页面显示部分,但仍无法在分析中看到任何内容。我已将_gaq.push一行更改为_gaq.push(['_ trackPageview',$ .mobile.activePage.attr(“data-url”)+'-Mobile']);因此我可以通过'移动'扩展程序识别分析中的页面 – Damian

+0

忽略我,我刚刚检查过分析,并且有很多带有' - 移动'后缀的页面,所以它看起来像一切正在工作..... it只需要一天的时间分析显示!再次感谢Ude – Damian

+1

[修正的解决方案](http://stackoverflow.com/a/18736218/315024)(适用于jQuery Mobile 1.3),现在'live'在jQuery中不存在。 – Walf

0
var _gaq = _gaq || []; 

    $(document).ready(function(e) { 
     (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); 
     })(); 
    }); 

    $('[data-role=page]').live('pageshow', function (event, ui) { 
     try { 
      _gaq.push(['_setAccount', 'YOUR_ANALYTICS_ID_GOES_HERE']); 

      if ($.mobile.activePage.attr("data-url")) { 
       _gaq.push(['_trackPageview', $.mobile.activePage.attr("data-url")]); 
      } else { 
       _gaq.push(['_trackPageview']); 
      } 
     } catch(err) {} 

    }); 

警告:现场方法更名为

可注入您的一个单独的文件(PHP,JSP)页面

你必需在收盘前把它注射div的数据角色页面

您可以查看jQuery的移动最佳做法和更具体的 参见:http://roughlybrilliant.com/jquery_mobile_best_practices#7

+0

'on'不是'live'的简单替代品。 – Walf

相关问题