Разрешение относительных URL в JavaScript - PullRequest
3 голосов
/ 15 октября 2010

Я создаю библиотеку JS, в которой требуется просматривать значения формы [action] и a [href] и преобразовывать их в абсолютные URL-адреса.

Например, я на http://a/b/c/d;p?q и обнаружил значение href "../g" (предположим, что элемента нет). Результирующий абсолют будет: http://a/b/g.

Есть ли библиотека JS, которая это уже делает? Я должен был в это верить.

Для получения дополнительной информации о том, что необходимо, спецификация: http://tools.ietf.org/html/rfc3986#section-5.4

Ответы [ 3 ]

10 голосов
/ 10 декабря 2010

Оказывается, что атрибут .href элемента A (не .getAttribute('href'), а .href) возвращает разрешенный (абсолютный) URL.

2 голосов
/ 03 декабря 2017

В современных браузерах, встроенный конструктор 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 (протокол, хост, путь, поиск, хэш и т. д.).

1 голос
/ 07 августа 2013

Отличное решение для JS, которое работает без DOM: https://gist.github.com/1088850 (работает везде, но особенно полезно для JS на стороне сервера).

...