URL
===

L'interface **`URL`** est utilisée afin d'analyser, de décomposer, de construire, de normaliser ou d'encoder des URL. Elle fonctionne en exposant des propriétés qui permettent de lire et de modifier les différentes composantes d'une URL.

On crée généralement un nouvel objet `URL` en fournissant l'URL sous la forme d'une chaîne de caractères à son constructeur, ou en fournissant une URL relative et une URL de base. On peut alors lire les composantes de l'URL et éventuellement la modifier.

Pour les anciens navigateurs qui n'implémenteraient pas le constructeur `URL()`, il est possible d'accéder à un objet `URL` en utilisant la propriété `URL` de l'interface `Window`. Il faudra alors vérifier s'il faut utiliser un préfixe pour le navigateur concerné.

**Note:** Cette fonctionnalité est disponible via les Web Workers

Constructeur
------------

`URL()`

Crée et renvoie un objet `URL` faisant référence à l'URL indiquée via la chaîne de caractères passée en argument qui représente une URL absolue ou via les deux chaînes de caractères passées en arguments qui représentent respectivement une URL relative et une URL de base.

Propriétés
----------

`hash`

Une chaîne de caractères contenant un `'#'` suivi de l'identifiant du fragment de l'URL.

`host` (en-US)

Une chaîne de caractères contenant le domaine (c'est-à-dire le nom d'hôte), suivi de, si un port a été indiqué, de `':'` puis du *port* de l'URL.

`hostname` (en-US)

Une chaîne indiquant le domaine de l'URL.

`href` (en-US)

Une chaîne de caractères qui renvoie tout l'URL.

`origin` (en-US) Lecture seule 

Renvoie une chaîne de caractères contenant l'origine de l'URL, c'est-à-dire la combinaison de son schéma, de son domaine et de son port.

`password` (en-US)

Une chaîne de caractères contenant le mot de passe indiqué avant le nom de domaine.

`pathname` (en-US)

Une chaîne de caractères contenant une barre oblique initiale `'/'` suivie du chemin de l'URL et qui n'inclut pas la chaîne de requête ou le fragment.

`port` (en-US)

Une chaîne de caractères contenant le numéro de port de l'URL.

`protocol`

Une chaîne de caractères contenant le schéma du protocole de l'URL, incluant les deux-points `':'` finaux.

`search`

Une chaîne de caractères indiquant la chaîne de paramètres de l'URL. Si des paramètres sont fournis, cette chaîne les contient tous et commence par un point d'interrogation `?`.

`searchParams` Lecture seule 

Un objet `URLSearchParams` qui peut être utilisé afin d'accéder aux paramètres individuels de la requête (qui sont également visibles depuis `search`).

`username` (en-US)

Une chaîne de caractères contenant le nom d'utilisateur indiqué avant le nom de domaine.

Méthodes
--------

`toString()`

Renvoie une chaîne de caractères contenant toute l'URL. Il s'agit d'un synonyme pour `URL.href` (en-US), bien que ce dernier ne puisse être utilisé pour modifier la valeur.

`toJSON()`

Renvoie une chaîne de caractères contenant tout l'URL. Elle fournit la même chaîne de caractères que la propriété `href`.

Méthodes statiques
------------------

`createObjectURL()`

Renvoie une chaîne de caractères contenant une URL de blob unique, c'est-à-dire une URL dont le schéma est `blob:`, suivi d'une chaîne de caractères opaque identifiant de façon unique l'objet dans le navigateur.

`revokeObjectURL()`

Révoque un objet `URL` précédemment créé à l'aide de `URL.createObjectURL()`.

Notes d'utilisation
-------------------

Le constructeur prend un paramètre `url`, et un paramètre optionnel `base` utilisé si le paramètre `url` est une URL relative :


```js
const url = new URL("../chats", "http://www.example.com/chiens");
console.log(url.hostname); // "www.example.com"
console.log(url.pathname); // "/chats"
```


Les propriétés de l'objet peuvent être utilisées pour construire l'URL :


```js
url.hash = "spock";
console.log(url.href); // "http://www.example.com/chats#spock"
```


Les URL sont encodées selon les règles édictées par la RFC 3986. Ainsi, on aura :


```js
url.pathname = "démonstration.html";
console.log(url.href); // "http://www.example.com/démonstration.html"
```


L'interface `URLSearchParams` peut être utilisée pour construire et manipuler le fragment de la requête.

Pour obtenir les paramètres de recherche de l'URL de la fenêtre courante, on pourra écrire :


```js
// https://mon.site/?id=123
const parsedUrl = new URL(window.location.href);
console.log(parsedUrl.searchParams.get("id")); // "123"
```


La méthode `toString()` de `URL` renvoie la valeur de la propriété `href` (en-US). On peut donc utiliser le constructeur pour normaliser et encoder une URL directement.


```js
const response = await fetch(
  new URL("http://www.example.com/démonstration.html"),
);
```

Spécifications
--------------

| Specification |
| --- |
| URL Standard # url |

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Une prothèse d'émulation pour `URL` avec la bibliothèque tierce `core-js`
* L'API URL (en-US)
* Qu'est-ce qu'une URL ?
* `URLSearchParams`.