// используем системное время как начальное значение для получения хорошего случайного числа
Random random = new Random(System.currentTimeMillis());
long x;
do{
x=random.nextLong();
}while(x<0 && x > n);
// Loop, пока не получим число больше или равно 0 и меньше n
Единственный способ действительно сделать это (и то, как 'reallysimplehistory' делает это), путем установки интервала, который продолжает проверять текущий хеш и сравнивать его с тем, чем это было прежде, мы делаем это и позволяем подписчикам подписаться на измененное событие, которое мы запускаем, если хеш изменяется.. не прекрасный, но браузеры действительно не поддерживают это событие исходно.
Обновление для хранения этого ответа новым:
При использовании jQuery (который сегодня должен быть несколько основополагающим для большинства), затем, хорошее решение состоит в том, чтобы использовать абстракцию, которую jQuery дает Вам при помощи его системы событий для слушания hashchange событий на объекте окна.
$(window).on('hashchange', function() {
//.. work ..
});
Хорошая вещь здесь - Вы, может написать код, который не должен даже волноваться о поддержке hashchange, однако ДЕЙСТВИТЕЛЬНО необходимо сделать некоторое волшебство в форме несколько менее известной функции jQuery специальные мероприятия jQuery.
С этой функцией Вы по существу добираетесь для выполнения некоторого кода установки для любого события, в первый раз, когда кто-то пытается использовать событие всегда (такое как привязка к событию).
В этом коде установки можно проверить на собственную поддержку браузера и если браузер исходно не реализует это, можно установить единственный таймер, чтобы опросить относительно изменений и инициировать событие jQuery.
Это полностью развязывает Ваш код от необходимости понять эту проблему поддержки, реализация специального мероприятия этого вида тривиальна (для получения простых 98% рабочая версия), но почему делают это, когда кто-то еще уже имеет.
Достойная реализация может быть найдена по http://code.google.com/p/reallysimplehistory/. Единственное, (но также и) проблема и ошибка, которую это имеет: в Internet Explorer, изменяющем хеш местоположения вручную, сбросит всю стопку истории (это - проблема браузера, и это не может быть решено).
Примечание, Internet Explorer 8 действительно имеет поддержку "hashchange" события, и так как это становится частью HTML5, который можно ожидать, что другие браузеры схватят.
HTML5 указывает a hashchange
событие. Это событие теперь поддерживается всеми современными браузерами. Поддержка была добавлена в следующих версиях браузера:
Есть много уловок для работы с History и window.location.hash в браузерах IE:
Как сказано в исходном вопросе, если вы перейдете со страницы a.html # b на страницу a .html # c, а затем нажмите кнопку "Назад", браузер не знает, что страница изменилась. Позвольте мне сказать это на примере: window.location.href будет 'a.html # c', независимо от того, находитесь ли вы в a.html # b или a.html # c.
На самом деле, a.html # b и a.html # c сохраняются в истории только , если элементы '' и '' ранее существовали на странице.
Однако, если вы поместите iframe внутри страницы, перейдите от a.html # b к a.html # c в этом iframe, а затем нажмите кнопку назад, iframe.contentWindow.document.location.href изменится, как ожидалось.
Если вы используете 'document.
Я использовал плагин jQuery, HUtil, и написал YUI Историю как интерфейс поверх него.
Проверьте это один раз. Если вам нужна помощь, я могу помочь.
Еще одна замечательная реализация – это История jQuery, которая будет использовать встроенное событие onhashchange, если оно поддерживается браузером, в противном случае будет использоваться iframe или интервал, соответствующие браузеру, чтобы гарантировать, что все ожидаемая функциональность успешно эмулируется. Он также предоставляет приятный интерфейс для привязки к определенным состояниям.
Еще один проект, заслуживающий упоминания, — это jQuery Ajaxy, который в значительной степени является расширением для истории jQuery, чтобы добавить ajax в смесь. Когда вы начинаете использовать ajax с хешами, это становится довольно сложным!