API URL
Примечание: Эта функция доступна в Потоках Web Workers.
API URL — это компонент стандарта URL, который определяет, что представляет собой допустимый указатель ресурса, и API, который предоставляет доступ к URL-адресам и позволяет их изменять. Стандарт URL также определяет понятия, такие как домены, хосты и IP-адреса, а также пытается описать стандартным способом устаревший application/x-www-form-urlencoded тип MIME, используемый для отправки содержимого веб-форм в виде набора пар ключ/значение.
Основные понятия и использование
Большая часть стандарта URL посвящена определению URL и его структуре и разбору. Также рассматриваются определения различных терминов, связанных с адресацией компьютеров в сети, и указаны алгоритмы разбора IP-адресов и адресов DOM. Большинство разработчиков больше интересует сам API.
Доступ к компонентам URL
Создание объекта URL для заданного URL-адреса анализирует URL и предоставляет быстрый доступ к его составным частям через его свойства.
let addr = new URL("https://developer.mozilla.org/en-US/docs/Web/API/URL_API");
let host = addr.host;
let path = addr.pathname;
В приведенном выше фрагменте кода создается объект URL для статьи, которую вы сейчас читаете, а затем извлекаются свойства host и pathname. В этом случае эти строки равны соответственно developer.mozilla.org и /en-US/docs/Web/API/URL_API.
Изменение URL
Большинство свойств URL могут быть изменены; вы можете записать новые значения в них, чтобы изменить URL, представленный объектом. Например, чтобы создать URL и установить его имя пользователя:
let myUsername = "some-guy";
let addr = new URL("https://example.com/login");
addr.username = myUsername;
Установка значения свойства username не только устанавливает значение этого свойства, но и обновляет весь URL. После выполнения приведенного выше фрагмента кода значение, возвращаемое href, равно https://some-guy@example.com/login. Это верно для любого из изменяемых свойств.
Запросы
Свойство search объекта URL содержит часть строки запроса URL. Например, если URL-адрес равен https://example.com/login?user=some-guy&page=news, то значение свойства search равно ?user=some-guy&page=news. Вы также можете найти значения отдельных параметров с помощью метода get() объекта URLSearchParams:
let addr = new URL("https://example.com/login?user=some-guy&page=news");
try {
loginUser(addr.searchParams.get("user"));
gotoPage(addr.searchParams.get("page"));
} catch (err) {
showErrorMessage(err);
}
Например, в приведенном выше фрагменте имя пользователя и целевая страница извлекаются из запроса и передаются соответствующим функциям, которые используются кодом сайта для входа в систему и перенаправления пользователя к желаемому месту назначения на сайте.
Другие функции в URLSearchParams позволяют изменить значения ключей, добавить и удалить ключи и их значения, а также отсортировать список параметров.
Интерфейсы
API URL — это простой API, с несколькими интерфейсами:
URL-
Можно использовать для анализа, построения, нормализации и кодирования URL-адресов.
URLSearchParams-
Определяет вспомогательные методы для работы со строкой запроса URL.
Примеры
Если вы хотите обработать параметры, включенные в URL-адрес, вы можете сделать это вручную, но намного проще создать объект URL, чтобы он сделал это за вас. Функция fillTableWithParameters() ниже принимает в качестве входного значения объект HTMLTableElement, представляющий таблицу. Строки добавляются в таблицу, по одной на каждый ключ, найденный в параметрах; первый столбец содержит имя ключа, а второй столбец — значение.
Обратите внимание на вызов URLSearchParams.sort() для сортировки списка параметров перед генерацией таблицы.
function fillTableWithParameters(tbl) {
const url = new URL(document.location.href);
url.searchParams.sort();
const keys = url.searchParams.keys();
for (const key of keys) {
const val = url.searchParams.get(key);
const row = document.createElement("tr");
const cell1 = document.createElement("td");
cell1.innerText = key;
row.appendChild(cell1);
const cell2 = document.createElement("td");
cell2.innerText = val;
row.appendChild(cell2);
tbl.appendChild(row);
}
}
Рабочая версия этого примера доступна на Glitch. Просто добавьте параметры в URL при загрузке страницы, чтобы увидеть их в таблице. Например, попробуйте https://url-api.glitch.me?from=mdn&excitement=high&likelihood=inconceivable.
Спецификации
| Спецификация |
|---|
| URL # api |
Совместимость с браузерами
| Настольный | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | |
@@iterator |
49 | 17 | 44 | 36 | 10.1 | 49 | 44 | 36 | 10.3 | 5.0 | 49 |
URLSearchParams |
49 | 17 | 29 | 36 | 10.1 | 49 | 29 | 36 | 10.3 | 5.0 | 49 |
URL_API |
49 | 17 | 29До версии 57 одиночные кавычки в URL кодировались (см. bug 1386683). |
36 | 10.1 | 49 | 29До версии 57 одиночные кавычки в URL кодировались (см. bug 1386683). |
36 | 10.3 | 5.0 | 49 |
append |
49 | 17 | 29 | 36 | 10.1 | 49 | 29 | 36 | 10.3 | 5.0 | 49 |
delete |
49 | 17 | 29 | 36 | 14 | 49 | 29 | 36 | 14 | 5.0 | 49 |
entries |
49 | 17 | 44 | 36 | 10.1 | 49 | 44 | 36 | 10.3 | 5.0 | 49 |
forEach |
49 | 17 | 44 | 36 | 10.1 | 49 | 44 | 36 | 10.3 | 5.0 | 49 |
get |
49 | 17 | 29 | 36 | 10.1 | 49 | 29 | 36 | 10.3 | 5.0 | 49 |
getAll |
49 | 17 | 29 | 36 | 10.1 | 49 | 29 | 36 | 10.3 | 5.0 | 49 |
has |
49 | 17 | 29 | 36 | 10.1 | 49 | 29 | 36 | 10.3 | 5.0 | 49 |
keys |
49 | 17 | 44 | 36 | 10.1 | 49 | 44 | 36 | 10.3 | 5.0 | 49 |
set |
49 | 17 | 29 | 36 | 10.1 | 49 | 29 | 36 | 10.3 | 5.0 | 49 |
size |
113 | 113 | 112 | 99 | 17 | 113 | 112 | 76 | 17 | 23.0 | 113 |
sort |
61 | 17 | 54 | 48 | 11 | 61 | 54 | 45 | 11 | 8.0 | 61 |
toString |
49 | 17 | 29 | 36 | 10.1 | 49 | 29 | 36 | 10.3 | 5.0 | 49 |
values |
49 | 17 | 44 | 36 | 10.1 | 49 | 44 | 36 | 10.3 | 5.0 | 49 |
| Настольный | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | |
URL |
19 | 12До Edge 79, аргументы запроса в базовом URL удалялись при вызове конструктораURL. |
26До версии 122,host, hostname и port не обрабатывались для неизвестных протоколов/схем. |
15 | 14.16До Safari 14.1, вызов конструктораURL с базовым URL, значение которого undefined, приводил к ошибке TypeError в Safari, см. ошибка 216841. |
25 | 26До версии 122,host, hostname и port не обрабатывались для неизвестных протоколов/схем. |
14 | 14.56До Safari на iOS 14.1, вызов конструктораURL с базовым URL, значение которого undefined, приводил к ошибке TypeError в Safari на iOS, см. ошибка 216841. |
1.5 | 4.4 |
|---|---|---|---|---|---|---|---|---|---|---|---|
URL_API |
3219 | 12 | 19До версии 57, в Firefox была ошибка, из-за которой одиночные кавычки в URL экранировались при доступе через API URL (см. ошибка 1386683). |
1915 | 76 | 3225 | 19До версии 57, в Firefox для Android была ошибка, из-за которой одиночные кавычки в URL экранировались при доступе через API URL (см. ошибка 1386683). |
1914 | 76 | 2.01.5 | 4.44 |
canParse_static |
120 | 120 | 115 | 106 | 17 | 120 | 115 | 80 | 17 | 25.0 | 120 |
createObjectURL_static |
19 | 12 | 19createObjectURL() больше недоступен в контексте ServiceWorker. |
15 | 6 | 25 | 19createObjectURL() больше недоступен в контексте ServiceWorker. |
14 | 6 | 1.5 | 4.4 |
hash |
32 | 13 | 22 | 19 | 7 | 32 | 22 | 19 | 7 | 2.0 | 4.4.3 |
host |
32 | 13 | 22 | 19 | 7 | 32 | 22 | 19 | 7 | 2.0 | 4.4.3 |
hostname |
32 | 13 | 22 | 19 | 10 | 32 | 22 | 19 | 10 | 2.0 | 4.4.3 |
href |
32 | 13 | 22 | 19 | 10 | 32 | 22 | 19 | 10 | 2.0 | 4.4.3 |
origin |
32 | 12 | 2626–49Результаты дляURL с использованием схемы blob некорректно вернули null. |
19 | 10 | 32 | 2626–49Результаты дляURL с использованием схемы blob некорректно вернули null. |
19 | 10 | 6.0 | 4.4.3 |
parse_static |
126 | 126 | 126 | 112 | 18 | 126 | 126 | 83 | 18 | Нет | 126 |
password |
32 | 12 | 26 | 19 | 10 | 32 | 26 | 19 | 10 | 6.0 | 4.4.3 |
pathname |
32 | 13 | 22До Firefox 53,pathname и search возвращали неверные значения для пользовательских протоколов. Учитывая protocol:host/x?a=true&b=false, pathname возвращал "/x?a=true&b=false", а search возвращал "", а не "/x" и "?a=true&b=false" соответственно. См. ошибка 1310483. |
19 | 10 | 32 | 22До Firefox для Android 53,pathname и search возвращали неверные значения для пользовательских протоколов. Учитывая protocol:host/x?a=true&b=false, pathname возвращал "/x?a=true&b=false", а search возвращал "", а не "/x" и "?a=true&b=false" соответственно. См. ошибка 1310483. |
19 | 10 | 2.0 | 4.4.3 |
port |
32 | 13 | 22 | 19 | 10 | 32 | 22 | 19 | 10 | 2.0 | 4.4.3 |
protocol |
32 | 13 | 22 | 19 | 10 | 32 | 22 | 19 | 10 | 2.0 | 4.4.3 |
revokeObjectURL_static |
19 | 12 | 19revokeObjectURL() больше недоступен в контексте ServiceWorker. |
15 | 6 | 25 | 19revokeObjectURL() больше недоступен в контексте ServiceWorker. |
14 | 6 | 1.5 | 4.4 |
search |
32 | 13 | 22До Firefox 53,pathname и search возвращали неверные значения для пользовательских протоколов. Учитывая protocol:host/x?a=true&b=false, pathname возвращал "/x?a=true&b=false", а search возвращал "", а не "/x" и "?a=true&b=false" соответственно. См. ошибка 1310483. |
19 | 10 | 32 | 22До Firefox для Android 53,pathname и search возвращали неверные значения для пользовательских протоколов. Учитывая protocol:host/x?a=true&b=false, pathname возвращал "/x?a=true&b=false", а search возвращал "", а не "/x" и "?a=true&b=false" соответственно. См. ошибка 1310483. |
19 | 10 | 2.0 | 4.4.3 |
searchParams |
51 | 17 | 29 | 38 | 10.1 | 51 | 29 | 41 | 10.3 | 5.0 | 51 |
toJSON |
71 | 17 | 54 | 58 | 11 | 71 | 54 | 50 | 11 | 10.0 | 71 |
|---|---|---|---|---|---|---|---|---|---|---|---|
toString |
19 | 17 | 54 | 15 | 7 | 25 | 54 | 14 | 7 | 6.0 | 4.4 |
username |
32 | 12 | 26 | 19 | 10 | 32 | 26 | 19 | 10 | 6.0 | 4.4.3 |
api.URL
Таблицы BCD загружаются только в браузере
api.URLSearchParams
Таблицы BCD загружаются только в браузере
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/URL_API