Да, это то, что вы должны сделать. Насколько я знаю, нет библиотеки, которая облегчила бы это.
Однако небольшой совет: если это вообще возможно, вам следует избегать использования схемы, которая требует от вас использовать процентное экранирование в строке элемента истории. Причина в том, что то, что возвращается location.hash
, когда заканчивается location.href
, скажем #%3C@%40
, варьируется от браузера к браузеру. Например, Chrome возвращает #%3C@%40
; Firefox возвращает #<@@
. Настройка location.hash
может иметь аналогичные эффекты, специфичные для браузера.
Механизм маркеров истории GWT основан на location.hash
и не нормализует эту разницу в поведении браузера. Конечным результатом является то, что если вы используете что-то, что требует процента выхода, вы получите URL-адреса, которые не могут быть разделены между браузерами - это проблема, если на какой-то другой странице вы хотите генерировать ссылки, которые переходят на определенное место в вашем GWT приложение, или если вы ожидаете, что пользователи будут обмениваться URL-адресами, на которые ссылается ваше приложение GWT. (или когда ваш пользователь устанавливает Chrome, импортирует свои закладки из Firefox, которые указывают на определенные места в вашем веб-приложении, и внезапно закладки не работают, как раньше)
При паранойе я бы не стал вводить символы ?
, #
, &
, %
, <
или >
в строку токена истории. Тем не менее, строки вроде orderDetails/oid=12313378
должны быть в порядке, и кросс-браузер.
(отредактировано, чтобы уточнить, что проблема, о которой я говорю, связана с тем, чтобы идентичные URL-адреса работали в разных браузерах, а не с тем, чтобы метод маркера истории вообще работал в каждом из разных браузеров)