2011-11-12 35 views
7

Tôi có một ứng dụng di động html5 nơi mọi thứ tồn tại trên một trang và tôi sử dụng history.back/popstate/etc để thay đổi nội dung của trang (thông qua jQuery Mobile). Tôi đang sử dụng Google Analytics để theo dõi các sự kiện khác nhau, và trên một trang tôi theo dõi nếu các lối ra người dùng thông qua một nút cụ thể:Google Analytics can thiệp vào history.back() trong trình duyệt android?

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

Trong android 2.2 history.back trình duyệt() được gọi nhưng onpopstate không bị sa thải và trang không bị thay đổi. Nếu tôi đặt window.onpopstate = function() { alert("!"); }; ngay trước history.back(), tôi sẽ không thấy cảnh báo.

Nếu tôi đảo ngược hai dòng (history.back() trước, sau đó _gaq.push), có vẻ như nó hoạt động, nhưng tôi không thể dựa vào loại thứ tự này trong suốt mã của tôi.

Không có trường hợp ngoại lệ nào bị ném. Nó hoạt động tốt trong iOS và Chrome trên máy tính để bàn.

Bất kỳ ý tưởng nào tại sao history.back() không hoạt động sau cuộc gọi Google Analytics?

+0

Tôi gặp vấn đề tương tự. Tôi không cho rằng bạn đã đưa ra giải pháp hoặc giải pháp thay thế kể từ lần đăng đầu tiên vào tháng này, phải không? – Trott

+0

Tôi không tìm được cách giải quyết nào. Cuối cùng, chúng tôi đã ngừng sử dụng phân tích google và chúng tôi tránh đặt mã gần history.back(). – DurhamG

+0

Tôi không thể nhớ chính xác vấn đề tương tự, nhưng xem xét JavaScript cho ứng dụng HTML5 tôi đã tạo (một năm rưỡi trước), tôi ủy quyền cuộc gọi đến Google Analytics thông qua chức năng mà tôi vừa gọi ở cuối các chức năng khác/các cuộc gọi cần nó. – cchana

Trả lời

1

Hm, không sao thực sự khó chịu: điều gì sẽ xảy ra nếu bạn quấn _gaq.push() vào một hàm mới và để lại history.go() chỉ ở đâu?

1

Có thể cuộc gọi đến google analytics thêm mục nhập mới vào ngăn xếp lịch sử và history.back() vừa đưa bạn đến trang bạn đang ở thời điểm này.

Hoặc GA cung cấp phạm vi lịch sử mới.

Thử gọi history.back() hai lần hoặc sử dụng top.history.back() hoặc window.history.back() hoặc self.history.back()

2

Hãy thử gói các cuộc gọi đến _ gaq.push() trong một async timeout 0:

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

này sẽ cho phép history.back() để thực hiện đầu tiên trước khi Google Analytics có khả năng ảnh hưởng đến chồng lịch sử.

+0

Điều này làm việc cho tôi, verry tốt đẹp. @DurhamG có thể xác nhận điều này cũng có hiệu quả với anh ấy không? Sau đó, tôi sẽ trao cho bạn tiền thưởng. – RTB

Các vấn đề liên quan