Je voudrais prendre une ficelle
var a = "http://example.com/aa/bb/"
et le transformer en un objet tel que
a.hostname == "example.com"
et
a.pathname == "/aa/bb"
javascript
url
freddiefujiwara
la source
la source
hostname
etpathname
directement à partir de l'location
objet.Réponses:
La manière moderne:
Renvoie un objet avec des propriétés
hostname
etpathname
, avec quelques autres .Le premier argument est une URL relative ou absolue; s'il est relatif, vous devez spécifier le deuxième argument (l'URL de base). Par exemple, pour une URL relative à la page actuelle:
En plus des navigateurs, cette API est également disponible dans Node.js depuis la v7, à travers
require('url').URL
.la source
new URL('/stuff?foo=bar#baz')
->SyntaxError: Failed to construct 'URL': Invalid URL
la source
pathname
supprime la barre oblique principale, contrairement aux autres navigateurs. Vous vous retrouverez donc avec/path
oupath
, selon votre navigateur.trouvé ici: https://gist.github.com/jlong/2428561
la source
parser = location;
et toutes les lignes suivantes fonctionnent. Je l'ai essayé dans Chrome et IE9 tout à l'heure.pathname
n'inclut pas la barre oblique principale dans IE. Allez comprendre. : Dhttp:
même si vous passez justedomain.com
en href (sans aucun protocole). Je voulais l'utiliser pour vérifier si le protocole manquait, et si c'est le cas, je pourrais l'ajouter, mais il suppose que http: n'a donc pas pu l'utiliser à cette fin.Voici une fonction simple utilisant une expression rationnelle qui imite le
a
comportement des balises.Avantages
Les inconvénients
-
-
ÉDITER:
Voici une ventilation de l'expression régulière
la source
renvoie le currentUrl.
Si vous souhaitez passer votre propre chaîne sous forme d'URL ( ne fonctionne pas dans IE11 ):
Ensuite, vous pouvez l'analyser comme:
la source
La réponse de freddiefujiwara est assez bonne, mais j'avais également besoin de prendre en charge les URL relatives dans Internet Explorer. J'ai trouvé la solution suivante:
Maintenant, utilisez-le pour obtenir les propriétés nécessaires:
Exemple JSFiddle: http://jsfiddle.net/6AEAB/
la source
var locationHost = (location.port !== '80' && location.port !== '443') ? location.host : location.hostname;
var locationOrigin = location.protocol + '//' + locationHost;
js-uri (disponible sur Google Code) prend une URL de chaîne et en résout un objet URI:
la source
Qu'en est-il de l'expression régulière simple?
la source
//user:[email protected]/path/x?y=z
et vous verrez pourquoi la simple expression régulière ne le coupe pas. Maintenant, jetez quelque chose d'invalide et il devrait également être renfloué de manière prévisible.aujourd'hui je rencontre ce problème et j'ai trouvé: URL - MDN Web APIs
Ce retour:
En espérant que ma première contribution vous aide!
la source
Voici une version que j'ai copiée à partir de https://gist.github.com/1847816 , mais réécrite afin qu'elle soit plus facile à lire et à déboguer. Le but de la copie des données d'ancrage dans une autre variable nommée "résultat" est parce que les données d'ancrage sont assez longues, et donc la copie d'un nombre limité de valeurs dans le résultat aidera à simplifier le résultat.
la source
Analyse d'URL inter-navigateurs , contourne le problème de chemin relatif pour IE 6, 7, 8 et 9:
Utilisation ( démo JSFiddle ici ):
Résultat:
la source
Pour ceux qui recherchent une solution moderne qui fonctionne dans IE, Firefox et Chrome:
Aucune de ces solutions qui utilisent un élément de lien hypertexte ne fonctionnera de la même manière dans Chrome. Si vous transmettez une URL non valide (ou vide) à Chrome, elle renverra toujours l'hôte d'où le script est appelé. Donc, dans IE, vous obtiendrez vide, tandis que dans Chrome, vous obtiendrez localhost (ou autre).
Si vous essayez de regarder le référent, c'est trompeur. Vous voudrez vous assurer que l'hôte que vous récupérez était dans l'URL d'origine pour gérer cela:
la source
The AngularJS way - fiddle here: http://jsfiddle.net/PT5BG/4/
la source
$document
et$window
servicesSolution simple et robuste utilisant le modèle de module. Cela inclut un correctif pour IE où le
pathname
n'a pas toujours une barre oblique (/
).J'ai créé un Gist avec un JSFiddle qui offre un analyseur plus dynamique. Je vous recommande de le vérifier et de fournir des commentaires.
Démo
Afficher l'extrait de code
Production
la source
Utilisez https://www.npmjs.com/package/uri-parse-lib pour cela
la source
Pourquoi ne l'utilisez pas?
la source
Vous pouvez également utiliser la
parse_url()
fonction du projet Locutus (ancien php.js).Code:
Résultat:
la source
Il fonctionne avec des URL absolues et relatives
la source
abc://username:[email protected]:123/path/data?key=value&key2=value2#fragid1
Arrêtez de réinventer la roue. Utilisez https://github.com/medialize/URI.js/
la source
Utilisez simplement la bibliothèque url.js (pour le web et node.js).
https://github.com/websanova/js-url
la source
un simple hack avec la première réponse
ceci peut être utilisé même sans argument pour déterminer le nom d'hôte actuel getLocation (). hostname donnera le nom d'hôte actuel
la source