2013-04-16 88 views
0

以前有關於在jQuery Mobile中使用Google Analytics的問題,提供了成功的答案here。但是,這是針對1.9之前版本的jQuery。Google Analytics和jQuery Mobile&jQuery 1.9

請有人幫助改變代碼,以便將折舊的.live事件替換爲當前的.on事件。我嘗試過但沒有成功。

下面是JavaScript代碼:

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) {} 

}); 
+0

只要改變生活對,最終的結果是一樣的。或者你仍然可以使用舊的方法綁定,不像現場它仍然有效。 – Gajotres

+0

@Gajotres'on'不是直接替代'live'的。對於委託事件,調用語法不同。 – Walf

+0

我從來沒有說過是直接替換,從我的經驗和官方文檔目前用於頁面事件綁定。更不用說這是一個官方的jQuery live方法聲明:從jQuery 1.7開始,.live()方法已被棄用。使用.on()附加事件處理程序。老版本的jQuery用戶應優先使用.delegate(),而不要使用.live()。 – Gajotres

回答

-1

使得.live()之後到。對()的變化,我也不得不從<head>和的<body>年底移動腳本,之前只是最後</div>附加到<div data-role="page">。否則,我不會獲得每個頁面視圖。

+0

這仍然不會正確連接到委派的事件。 – Walf

3

代碼谷歌給出了跟蹤信息頁面,你會是這個樣子,這取決於功能,你所選擇的:

var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']); 
    _gaq.push(['_setDomainName', 'foo.bar']); 
    _gaq.push(['_trackPageview']); 

    (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); 
    })(); 

而且有人告訴你把立即開通後<body>。你應該通過去除_trackPageview線增加一個簡單的代碼段的代碼塊的結尾保持與jQuery Mobile的(在V1.3測試)在同一個地方,贈送:

var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']); 
    _gaq.push(['_setDomainName', 'foo.bar']); 

    (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); 
    })(); 

    $(document).on('pageshow', ':jqmData(role="page")', function(evt, data) { 
     var url = $(this).jqmData('absUrl'); 
     try { 
      if (url) { 
       url = $.mobile.path.parseUrl(url) 
       _gaq.push(['_trackPageview', url.pathname + url.search + url.hash]); 
      } 
      else { 
       _gaq.push(['_trackPageview']); 
      } 
     } 
     catch(e) {} 
    }); 
3

除了.live被替換爲.on,Google將用analytics.js替換ga.js,作爲對Universal Analytics進行更改的一部分。

我正在使用Walf發佈的代碼的變體來追蹤基於jQuery Mobile的網站上的各個頁面,但需要對其進行更改才能使用新的Universal Analytics配置。我有以下腳本只是身體標記後:

(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'); 

ga('create', 'UA-XXXXXXXX-X', 'site_name.com'); 
ga('send', 'pageview'); 

$(function() { 
    $('[data-role=page]').on('pageshow', function (event, ui) { 
     try { 
      if (location.hash) { 
       ga('send', 'pageview', location.hash); 
      } 
      else { 
       ga('send', 'pageview'); 
      } 
     } 
     catch (error) { 
     } 
    }); 
}); 

頁面正受到谷歌Analytics(分析)位置的散列(例如#about)上市給了我,我希望看到有關訪問者是如何與網站交互的信息。

+0

這隻適用於存在於DOM中的頁面,而不是動態加載的頁面,因爲您尚未使用委託事件。 – Walf

0

口主體標籤後:

<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'); 
    ga('create', 'UA-XXXXXXX-XX', 'exemple.com'); 
</script> 

而且在每一頁:

<div data-role="page" ...> 
    ... 

    <script> 
     $(document).off("pageshow", 'div[data-role="page"]').on("pageshow", 'div[data-role="page"]', function() { 
      ga('send', 'pageview', $.mobile.path.getLocation()); 
     }); 
    </script> 
</div>