У браузеров на движке WebKit какое-то своё, фашисткое отношение к «решётке» (#), после которой указывается локальный якорь в URL.
Во-первых, когда устанавливаешь location.hash, где более одной «решётки», Safari и Chrome иногда перезагружают страницу (зачем?).
Во-вторых, вторая и последующие «решётки» кодируются как «%23» (ни один браузер больше так не делает).
В-третьх, если постоянно что-то делать с частью после решётки (например, каждые 10 миллисекунд прибавлять и убавлять один символ), то эти два браузера-моих-кровопийцы не позволят редактировать адрес.
Иногда я верю, что один браузер это хорошо.
Иногда.
Добавлено 13 декабря 0:40: в комментариях мне подсказываю, что, кодируя «решётку» как «%23», WebKit поступает по RFC. То есть, формально, претензий никаких. По смыслу же, мне кажется, что «решётку» тут кодировать не надо.
Комментарии 14
Мне, кстати ни один целиком не нравится. Даже у тех что можно подшкурить есть свои фундаментальные «особенности».
http://tools.ietf.org/html/rfc3986#section-3.5:
То есть, «fragment» начинается с «#» и заканчивается концом строки. Никаких ограничений на использование символа решётки дальше RFC не накладывает. А что не запрещено, то разрешено.
fragment = *( pchar / «/» / «?» )
pchar = unreserved /
unreserved = ALPHA / DIGIT /
/ «*» / «+» / «,» / «;» / «=»
легко видеть, что # не может быть частью fragment
Уё… а зачем так сложно? Я как разделитель там дальше слэш использую. Хотя если надо, то тогда надо.
Ну, вот именно что надо. Делал адресацию для testlink, в fragment сохраняли состояния трёх его фреймов. Разделителем я выбрал «#» (слеши уже в адресах есть). В итоге,
Для моей цели «+» не подходит, так как легко может встретиться в обычном URL, а я сохраняю во fragment состояние фреймов. «#» был отличный выбор, пока мне не встретились браузеры WebKit, так как в Testlink нет «решётки» в URL.
Гм, но ведь в случае с ! он тоже может встретиться в обычном URL, как тут быть?
Я же решаю конкретную задачу, о чём уже не раз упоминал. Там не встречаются «!» в URL.