2012-05-02 4 views
0

Для хрома событие срабатывает при загрузке страницы, но в firefox оно срабатывает правильно, только когда вы нажимаете кнопку назад или вперед. Итак, как написать скрипт, который отлично работает для всех браузеров?Каков идеальный способ обработки window.onpopstate для всех браузеров?

ответ

1

Я бы выбрал обнаружение браузера на этом (фактически, я сделал). Я использую .data Jquery (в), чтобы установить логический флаг для проверки против:

// chrome fires a popstack event on page load, so do a check before proceeding 
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; 
if(is_chrome && !$('body').data('allow-popstate-action')) { 
    $('body').data('allow-popstate-action', true); 
    return false; 
} 

Я добавил это условное положение в функции, которая связана с popstate события, поэтому первый раз это называется в Chrome (который находится на странице), он просто выходит из функции, ничего не делая. В следующий раз (предыдущие/обратные кнопки) он будет работать нормально.

Я застрял со старой версией jQuery в этом проекте, поэтому я не мог использовать jQuery.browser.webkit, но вы, вероятно, сможете.

0

Несколько более элегантный способ заключается в том, чтобы добавить тайм-аут 1 мс, прежде чем добавлять слушателя всплывающего окна. Поскольку начальный popstate будет срабатывать до того, как будет запущен любой асинхронный код, функция popstate будет работать правильно (только при действиях в прямом/обратном направлении):

window.setTimeout(function(){ 
    $(window).on('popstate', function(event){ 
     // do things 
    }); 
}, 1); 
Смежные вопросы