<rmcreative>

RSS

popstate, webkit и старый Chrome

20 февраля 2015

Вроде бы рекомендацию HTML5 приняли, поддержка JavaScript везде неплохая. Думал, проблем поработать с историей браузера не будет.

Не тут-то было! Оказывается, Safari и старые Chrome вызывают лишнее событие popstate при начальной загрузке страницы. Chrome это в современных своих версиях поправил, а вот в актуальном Safari проблема есть.

Изучение кода pjax и гугление дало много разных решений. Вот правильное (код для jQuery, но без него будет примерно оно же):

$(window).load(function() {
    setTimeout(function() {
        $(window).on('popstate', function (e) {
                // работаем
        });
    }, 0);
});

Идея в том, чтобы зарегистрировать наш обработчик после того, как начальное событие popstate всплывёт. Всплывает оно по load, поэтому вешаем обработчик на него. setTimeout с задержкой 0 нужен для того, чтобы обработчик был последним.

Комментарии RSS

  1. №9633
    Nepster
    Nepster 20 февр. 2015 г., 22:17:36

    А зачем поощрять использование старых браузеров усложняя разработку и продолжая их существование ?

    Почему нельзя сделать проверку на поддержку html5 (оброзно гвооря делаем проверку на наличие нового объекта типа FormData), если поддержки нет, то просим пользователя обновить браузер.

    Так и прогрес можно двигать вперед и избавляться от всяких там ие 8, 9 и 10.

  2. №9634
    Undestroyer
    Undestroyer 20 февр. 2015 г., 22:46:55

    @Nepster, потому что гипотетический пользователь хочет получить нашу страницу, а не обновлять браузер (тем более что до сих пор у многих этот процесс вызывает затруднение). Так эе у определенных пользователей может не быть возможности самостоятельно обновлять браузеры (например на рабочем месте)

  3. №9635
    Sam
    Sam 20 февр. 2015 г., 22:50:30

    Nepster, как-бы Safari с webkit не старый. Современный.

    Поддержка HTML5 и history API есть в обоих случаях.

  4. №9638
    Партнёр
    Партнёр 21 февр. 2015 г., 19:23:37

    @Undestroyer, я бы сказал не столько затруднения, сколько нежелания. В большинстве случаев ведь такие люди отговариваются фразой вроде "привык, и не хочу ничего менять", несмотря на доводы о безопасности, скорости и удобности.

  5. №10070
    Денис
    Денис 26 нояб. 2015 г., 9:27:54

    Спасибо большое, два дня убил на сафари пока нашел из за чего у меня постоянный релоад :)

  6. №10614
    App maker
    App maker 05 авг. 2016 г., 15:38:28

    Спасибо за решение! Весь инет перерыл пока нашел.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.