Google Analytics вмешивается в history.back () в браузере Android? - PullRequest
7 голосов
/ 12 ноября 2011

У меня есть мобильное приложение 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 ]

2 голосов
/ 24 июля 2012

Попробуйте обернуть вызов в _ 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 потенциально повлияет на стек истории.

1 голос
/ 24 июля 2012

Возможно, вызов Google Analytics добавляет новую запись в стек истории, а history.back () просто возвращает вас на страницу, на которой вы сейчас находитесь.

Или GA дает новую область истории.

Попробуйте дважды вызвать history.back () или использовать top.history.back () или window.history.back () или self.history.back ()

1 голос
/ 24 июля 2012

Хм, ладно, очень неприятный вопрос: что произойдет, если вы поместите _gaq.push () в новую функцию и оставите history.go () там, где она есть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...