Angular.js: Проблема с $ location для декодированных и некодированных URL

Созданный на 11 июл. 2017  ·  4Комментарии  ·  Источник: angular/angular.js

Я отправляю ...

  • [x] отчет об ошибке
  • [] запрос функции
  • [] другое (пожалуйста, не отправляйте сюда запросы на поддержку (см. выше))

Текущее поведение:

Привет, народ.
После обсуждения в PR, которое я создал, чтобы исправить ошибку в сервисе $ location для URL-адреса, который содержит апострофы @gkalpak, обратите внимание, что потенциально апострофы в URL-

подробности см. в PR. https://github.com/angular/angular.js/pull/16098

Ожидаемое / новое поведение:
недекодированный и декодированный URL-адрес должен работать с использованием сервиса $ location

Угловая версия: 1.x.

Браузер: все

Что-нибудь еще:

Как это исправить

В src / ng / browser.js есть функция fireStateOrUrlChange, которая имеет эту проверку

if (lastBrowserUrl === self.url () && prevLastHistoryState === cachedState) {{
возвращение;
}
Основная проблема, похоже, заключается в том, что мы сравниваем self.url () с lastBrowserUrl, но lastBrowserUrl может быть установлен из разных источников, не всегда с одной и той же кодировкой / декодированием.

$location low broken expected use bug

Самый полезный комментарий

Мы частично исправили это, используя браузер <a href> для нормализации URL-адресов в нескольких ключевых областях (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Однако ни один браузер не нормализует все с помощью этого метода. Чтобы по-настоящему исправить это, нам нужно реализовать нормализацию самостоятельно.

Я реализовал POC, чтобы выполнить эту нормализацию вручную, однако мы решили, что это слишком большое изменение на данный момент. К вашему сведению, 15 из протестированных, добавленных в этот коммит, в настоящее время не работают в chrome.

По этим причинам мы собираемся перевести это в состояние «не исправлять».

Все 4 Комментарий

@gkalpak, вы имеете в виду (из вашего комментария ) что-то вроде url = urlResolve(url).href в $browser.url или изменение всех вызовов на $browser.url(val) чтобы они были согласованными? Добавление urlResolve похоже, работает, хотя меняет некоторые тесты (некоторые URL-адреса теперь заканчиваются на / ).

@jbedard , детали реализации не

@dmartres, можете ли вы подтвердить, что это по-прежнему проблема в версии 1.7.3? Я думаю, что aee7d53a6b5d3d7bc0a1124fd3df9b263777e72e (fixing # 16592) могло это исправить?

Мы частично исправили это, используя браузер <a href> для нормализации URL-адресов в нескольких ключевых областях (https://github.com/angular/angular.js/commit/e68697e2e30695f509e6c2c1e43c2c02b7af41f0, https://github.com/ angular / angular.js / commit / 2f72a69ded53a122afad3ec28d91f9bd2f41eb4f). Однако ни один браузер не нормализует все с помощью этого метода. Чтобы по-настоящему исправить это, нам нужно реализовать нормализацию самостоятельно.

Я реализовал POC, чтобы выполнить эту нормализацию вручную, однако мы решили, что это слишком большое изменение на данный момент. К вашему сведению, 15 из протестированных, добавленных в этот коммит, в настоящее время не работают в chrome.

По этим причинам мы собираемся перевести это в состояние «не исправлять».

Была ли эта страница полезной?
0 / 5 - 0 рейтинги