Я предполагал, что могу просто установить для обработчика события onhashchange значение null, изменить хэш, а затем установить для обработчика события onhashchange что-то другое, но рассмотрим следующий код:
window.onhashchange = null;
window.location.hash = "this_should_not_concern_you";
window.onhashchange = function() {alert('chunky bacon')};
doOtherStuff();
Поэтому, когда значение изменилось, обработчик событий для изменения хэша не существует, но я все еще получаю оповещения для "короткого сала".
Обновление
Я выбрал решение setInterval от Jed. И хотя это работает (спасибо Джеду), оно уродливо и хрупко. Если бы произошло ( несколько парадоксальное ) onAllEventsHandled
событие, то я мог бы поместить туда свою подписку onhashchange и быть уверенным, что я не случайно предупреждаю о "толстом беконе" только потому, что doOtherStuff()
занимает 2 секунды для завершения.