2014-09-03 3 views
7

Я работаю с API истории и использую push и pop state. Я хочу остановить событие popstate от стрельбы в каком-то сценарии, где я только добавляю хэш в URL. например, в некоторых случаях при щелчке на якоре он добавляет # к URL-адресу, а popstate сразу же запускается). Я хочу избежать всех сценариев, в которых # или #somehasvalue прилагается к URL-адресу и отключается от всплытия. Я поддерживаю URL-адрес с параметрами запроса, и у меня нет сценария, в котором мне нужно событие popstate для запуска с # в URL-адресе.stop firing popstate on hashchange

Вот мой код.

if (supportsHistoryApi()) { 

    window.onpopstate = function (event) { 
    var d = event.state || {state_param1: param1, state_param2: param2};      
    var pathName = window.location.pathname, 
     params = window.location.search; 

    loadData(event, pathName + params, d.state_param1, d.state_param2); 

} 

ответ

6

Насколько я понял, вы, к сожалению, не можете остановить всплеск.

Что вы можете сделать, это проверить объект event.state. Это будет недействительным при изменении хеша. Поэтому я предложил бы добавить

if(event.state === null) { 
    event.preventDefault(); 
    return false; 
} 

К вашему popstate обработчик событий в самом начале. Я думаю, что это лучший способ предотвратить срабатывание кода обработки popstate на вашей стороне, когда изменяется хэш, но мне было бы интересно узнать, есть ли другие решения.

+0

Это не работает, когда вы возвращаетесь на первую открытую страницу. Потому что тогда «государство» также является «нулевым», но по-прежнему не имеет хэширования –