2011-11-12 82 views
7

我有一個html5移動應用程序,其中的一切都存在於一個頁面上,我使用history.back/popstate/etc來更改頁面內容(通過jQuery Mobile)。我使用谷歌分析跟蹤各種活動,並在一個頁面上我跟蹤如果通過特定的按鈕在用戶退出:谷歌Analytics(分析)在android瀏覽器中干擾history.back()?

$('#my-back-button').bind('tap', function() { 
    _gaq.push(['_trackEvent', 'mycategory', 'myaction']); 
    history.back(); 
    return false; 
}); 

在Android 2.2瀏覽器history.back()被調用,但onpopstate不解僱並且頁面不會更改。如果我在history.back()之前放置window.onpopstate = function() { alert("!"); };,則看不到警報。

如果我倒過去兩行(history.back()第一次,然後_gaq.push),它似乎工作,但我不能依靠這種排序在我的代碼。

沒有任何異常被拋出。它適用於iOS和桌面版Chrome。

任何想法爲什麼history.back()在谷歌分析調用後不起作用?

+0

我有完全相同的問題。自從本月首次發佈以來,我認爲你沒有想出解決方案或解決方法,對嗎? – Trott

+0

我沒有找到解決方法抱歉。我們最終停止使用谷歌分析,並且避免將代碼放在history.back()附近。 – DurhamG

+0

我不能具體記得有同樣的問題,但通過JavaScript來查看我構建的HTML5應用程序(一年半前),我通過一個函數將呼叫委託給Google Analytics,該函數在其他函數結束時調用/需要它的呼叫。 – cchana

回答

1

嗯,好吧真的很討厭:如果將_gaq.push()換成一個新函數並將history.go()留在原來的位置會發生什麼?

1

也許呼叫谷歌分析添加一個新的條目到歷史堆棧和history.back()只是帶你到您目前的頁面。

或GA給歷史提供了一個新的範圍。

嘗試調用history.back()兩次或使用top.history.back()或window.history.back()或self.history.back()

2

嘗試包裹調用_ gaq.push()在0異步超時:

$('#my-back-button').bind('tap', function() { 
    setTimeout(function() { 
     _gaq.push(['_trackEvent', 'mycategory', 'myaction']); 
    }, 0); 
    history.back(); 
    return false; 
}); 

這將允許history.back()先執行之前,谷歌Analytics(分析)可能會影響歷史堆棧。

+0

這適用於我,非常好。 @DurhamG可以證實這是否也適用於他?然後我會獎勵你的獎金。 – RTB