Подтвердить что ты не робот

Настройка JavaScript window.location

В настоящее время я устанавливаю свойство window.location.pathname для перенаправления пользователя на относительный URL. Новый URL имеет параметры, поэтому строка JavaScript выглядит так:

window.location.pathname = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;

Это успешно работает в Firefox, однако Chrome кодирует знак вопроса с помощью "% 3F", и запрос впоследствии терпит неудачу.

Я не уверен, правильно ли использую window.location. Нужно ли использовать свойства window.location, такие как pathname или href? Я обнаружил, что как только я установил одно свойство, местоположение будет перезагружено, поэтому, например, свойства поиска и пути не могут быть установлены отдельно. Можно ли напрямую установить window.location? Мне нужно установить только относительный URL с параметром.

4b9b3361

Ответ 1

pathname и многие другие свойства location, а ссылки отражают только часть URL-адреса:

http:  //www.example.com/path/to/example.html?param1=2&param3=4#fragment
^protocol^hostname      ^pathname            ^search           ^hash

Как вы можете видеть, часть ?... URL-адреса не является частью pathname; нет смысла писать значение, содержащее ? - location.pathname, поскольку эта часть URL-адреса не может содержать знак вопроса. Chrome исправляет вашу ошибку, кодируя символ до последовательности, которая означает буквенный знак вопроса, который не заканчивается pathname.

Эти свойства отлично подходят для взлома URL-адреса в своих составных частях для обработки, но вы, вероятно, не хотите писать им в этом случае. Вместо этого напишите в location.href. Это представляет весь URL-адрес, но совершенно нормально писать относительный URL-адрес; это будет выработано относительно текущего значения, поэтому на самом деле нет необходимости читать и разделять pathname вообще:

location.href= 'myPage.xhtml?u='+encodeURIComponent(selected_user.Username);

Обратите внимание на URL-кодирование. Если имя пользователя может содержать символы, отличные от буквенно-цифровых символов, вам, вероятно, понадобится это, чтобы остановить символы, нарушающие параметр. Всегда URL-кодируйте произвольные строки, прежде чем помещать их в часть URL.

Ответ 2

Попробуйте установить свойство location.href вместо window.location.pathname.

Ответ 3

Использование window.location.href считается самым безопасным способом установки URL-адреса. Я думаю, что это должно исправить проблему кодирования.

window.location.href = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;

Если это не поможет, укажите пример URL.