Google Analytics вмешивается в history.back() в браузере Android?
У меня есть мобильное приложение html5, где все существует на одной странице, и я использую history.back/popstate/etc, чтобы изменить содержимое страницы (через jQuery Mobile). Я использую Google Analytics для отслеживания различных событий, и на одной странице я отслеживаю, выходит ли пользователь с помощью определенной кнопки:
$('#my-back-button').bind('tap', function() {
_gaq.push(['_trackEvent', 'mycategory', 'myaction']);
history.back();
return false;
});
В браузере Android 2.2 вызывается history.back(), но onpopstate не запускается и страница не изменяется. Если я поставлю window.onpopstate = function() { alert("!"); };
непосредственно перед history.back () я не вижу предупреждения.
Если я переверну две строки (сначала history.back(), а затем _gaq.push), это, похоже, сработает, но я не могу полагаться на такой порядок в моем коде.
Никаких исключений не выбрасывается. Он отлично работает в iOS и настольном Chrome.
Есть идеи, почему history.back () не работает после вызова Google Analytics?
3 ответа
Попробуйте перевести звонок на _gaq.push()
в асинхронном таймауте 0:
$('#my-back-button').bind('tap', function() {
setTimeout(function() {
_gaq.push(['_trackEvent', 'mycategory', 'myaction']);
}, 0);
history.back();
return false;
});
Это позволит history.back()
выполнить первым, прежде чем Google Analytics потенциально повлияет на стек истории.
Хм, хорошо, действительно противный: что произойдет, если вы поместите _gaq.push() в новую функцию и оставите history.go() именно там, где она есть?
Возможно, вызов Google Analytics добавляет новую запись в стек истории, а history.back () просто возвращает вас на страницу, на которой вы находитесь в данный момент.
Или GA дает новый простор истории.
Попробуйте дважды вызвать history.back () или использовать top.history.back () или window.history.back () или self.history.back()