Возможные проблемы установки window.location.hash
У меня есть код javascript, который в какой-то момент устанавливает window.location.hash
в определенную строку. Это отлично работает в Firefox 3, но я хочу знать, сработает ли я с этим позже, т.е. Это кросс-браузерное решение (включая IE6)?
Кроме того, я использую ReallySimpleHistory. Будет ли это испортить его внутреннее состояние?
Спасибо
Ответы
Ответ 1
window.location.hash
существует с тех пор, как JavaScript был представлен в Netscape Navigator 2 еще в 1995 году. Сначала он поддерживался Microsoft в Internet Explorer 3 в 1996 году. Я думаю, вы можете быть достаточно уверенным, что каждый браузер, поддерживающий JS, поддерживает его.
С быстрым взглядом на источник, похоже, что ReallySimpleHistory довольно широко использует это свойство, поэтому вы можете его разбить. Вместо этого вы можете использовать его метод add(newLocation)
(который работает, установив window.location.hash
).
Ответ 2
Получить:
var hash = location.hash.slice(1);
Set:
location.hash = '#' + 'string';
Ответ 3
Старый поток я знаю, но window.location.hash
также зависит от размера. Если вы передаете большие объемы данных и хотите сохранить состояние в хэше, вы можете столкнуться с некоторыми проблемами.
IE предоставит вам ошибку:
SCRIPT5 - Access denied.
, если вы попытаетесь присвоить хэш, превышающий предел
что очень полезно.
Просто пища для размышлений.
Ответ 4
Все "современные" (a.k.a A-Graded) браузеры позволяют устанавливать хеш и не перезагружать страницу при этом. Те, которые перезагружают страницу, относятся к более старым, например Safari 2.0.4 и Opera 8.5x.
Смотрите мой пост Usenet на comp.lang.javascript
, где я объясню это немного подробнее.
Также обратите внимание, что HTML5, наконец, указывает, что хэш-сеттер должен изменить фактический хэш, но не перезагружать страницу.
Ответ 5
Настройка window.location.hash
отлично работает в IE6 и IE7.
В некоторых случаях чтение window.location.hash
в IE6 сразу после того, как набор вернет старое значение, но браузер успешно установил хэш. Пример:
alert(window.location.hash);
window.location.hash = '#newHash';
/* Sometimes, it will return the old value,
I haven't figured out why it does that, and
it rather rare. */
alert(window.location.hash);
Если вы просто используете его для его установки, вам не должно возникать никаких проблем.