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

Другие вопросы по тегам