Разрешение относительных URL-адресов в JavaScript
-
30-09-2019 - |
Вопрос
Я создаю библиотеку JS, которая требует просмотра значений form[action] и a[href] и разрешения их в абсолютные URL-адреса.
Например, я нахожусь http://a/b/c/d;p?q и встретим значение href «../g» (предположим, что элемента <base> нет).В результате абсолют будет: http://а/б/г.
Есть ли библиотека JS, которая уже делает это?Мне придется в это поверить.
Для получения дополнительной информации о том, что необходимо, спецификация:http://tools.ietf.org/html/rfc3986#section-5.4
Решение
Оказывается, .href
атрибут элемента A (не .getAttribute('href')
, но .href
) возвращает разрешенный (абсолютный) URL-адрес.
Другие советы
В современных браузерах это решает встроенный конструктор URL:
u = (new URL("?newSearch",
"http://a.example/with/a/long/path.file?search#fragment")).href
(даёт http://a.example/with/a/long/path.file?newSearch
)
Если вы хотите, чтобы база относилась к текущему документу, вы можете сделать это явно:
u = (new URL("?newSearch", document.location)).href
А URL
Объект также предоставляет вам доступ ко всем компонентам URL-адреса (протокол, хост, путь, поиск, хэш и т. д.).
Хорошее решение на чистом JS, которое работает без DOM: https://gist.github.com/1088850 (работает везде, но особенно полезно для серверного JS).