Поэтому я бы хотел, чтобы моя страница загружала контент, если хэш окна изменился.
С помощью Mootools это довольно просто:
$extend(Element.NativeEvents, {
hashchange: 1
});
, а затем:
window.addEvent('hashchange', function() {});
Тем не менее, событие hashchange
срабатывает при загрузке страницы, хотя спецификация требует, чтобы он не срабатывал до завершения загрузки страницы!
Если я не загружаю страницу дляв первый раз, без хэша, затем все работает как положено.
Я думаю, что проблема здесь в том, что браузер считает загрузку страницы "завершенной", а затем запускает оставшуюся часть JavaScript, которая включает в себяОбнаружение хэша для загрузки нужной страницы.
Например, если я введу http://foo.bar/
, все будет работать нормально.Однако http://foo.bar/#test
в идеале будет загружать начальную страницу, обнаруживать хэш и загружать «тестовое» содержимое.
К сожалению, браузер загружает начальную страницу, считает ее «готовой» и затем загружает«тестовый» контент, который затем запускается onHashChange
.Упс?
Это вызывает бесконечный цикл, если я специально не прошу браузер НЕ обновлять хеш, если срабатывает событие onHashChange
.Это просто:
var noHashChange;
noHashChange = true;
var hashes = window.location.hash.substr(1).split("/"); // Deciphers the hash, in this case, hashes[0] is "test"
selectContent(hashes[0]); // Here, selectContent would read noHashChange, and wouldn't update the hash
noHashChange = false;
Итак, теперь обновление хэша ПОСЛЕ загрузки страницы будет работать правильно.За исключением того, что он все еще сходит с ума при начальной загрузке страницы и извлекает содержимое примерно 3 или 4 раза, потому что он продолжает обнаруживать, что хэш изменился.Грязный.
Я думаю, что это может иметь какое-то отношение к тому, как я устанавливаю хэш, но я не могу придумать лучшего способа сделать это, кроме:
window.location.hash = foobar;
..внутри функции, которая запускается всякий раз, когда выбирается новый контент.
В этом и заключается проблема, да?Страница загружена, ТОГДА содержимое загружено (если оно есть) ...
Надеюсь, я был связным ...