@Randomblue Qu'en est-il? Vous obtiendrez about://. Cependant, je suis curieux de savoir, quel serait le cas d'utilisation about:blank? Je ne sais pas si un navigateur injecte des ressources de plugin about:blank, mais il semble que cela pourrait être le seul cas d'utilisation.
Shef
3
Cela ne fonctionne pas du tout si vous avez une chaîne URL, non? (vous devez être àlocation pour que cela fonctionne)
Nick T
1
Désolé pour la réponse tardive, @NickT. Oui, ça ne fait pas ça. Veuillez utiliser la belle solution fournie par David pour cela.
Shef
1
Cette réponse doit être choisie comme la bonne réponse. Il est propre et utilise l'objet de localisation standard.
Mohit Gangrade
14
Vous ne pouvez pas utiliser location.hostau lieu de location.hostname+ location.port?
c24w
180
Aucune de ces réponses ne semble répondre complètement à la question, qui appelle une URL arbitraire, pas spécifiquement l'URL de la page actuelle.
Méthode 1: utilisez l'API URL (mise en garde: pas de prise en charge IE11)
Vous pouvez utiliser l' API URL (non prise en charge par IE11, mais disponible partout ailleurs ).
Cela facilite également l'accès aux paramètres de recherche . Autre bonus: il peut être utilisé dans un Web Worker car il ne dépend pas du DOM.
Méthode 2 (ancienne méthode): utilisez l'analyseur intégré du navigateur dans le DOM
Utilisez-le si vous en avez besoin pour fonctionner également sur des navigateurs plus anciens.
// Create an anchor element (note: no need to append this element to the document)const url = document.createElement('a');// Set href to any path
url.setAttribute('href','http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
C'est tout!
L'analyseur intégré du navigateur a déjà fait son travail. Maintenant, vous pouvez simplement saisir les pièces dont vous avez besoin (notez que cela fonctionne pour les deux méthodes ci-dessus):
// Get any piece of the url you're interested in
url.hostname;// 'example.com'
url.port;// 12345
url.search;// '?startIndex=1&pageSize=10'
url.pathname;// '/blog/foo/bar'
url.protocol;// 'http:'
Bonus: paramètres de recherche
Il y a de fortes chances que vous souhaitiez également séparer les paramètres d'URL de recherche, car '? StartIndex = 1 & pageSize = 10' n'est pas trop utilisable en soi.
Si vous avez utilisé la méthode 1 (API URL) ci-dessus, vous utilisez simplement les getters searchParams:
link.protocol m'obtient un "http:" si j'inspecte un anker avec "google.com" :-(var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
eXe
Faites-vous cela sur une httppage peut-être? S'il n'est pas spécifié, il «héritera» de l'emplacement actuel
Stijn de Witt
4
Ceci est une réponse fantastique et devrait obtenir plus de votes, car cette réponse ne se limite pas à l' emplacement actuel , mais fonctionne pour n'importe quelle URL , et parce que cette réponse utilise l'analyseur intégré du navigateur au lieu d'en créer un nous-mêmes (ce que nous ne pouvons pas espérons faire aussi bien ou aussi vite!).
Stijn de Witt
Merci pour cette astuce astucieuse! Je voudrais ajouter une chose: il y a les deux hostet hostname. Le premier inclut le port (par exemple localhost:3000), tandis que le second n'est que le nom de l'hôte (par exemple localhost).
codener
Cela fonctionne bien en cas d'URL absolue. Il échoue en cas d'URL relative et de navigateur croisé. Aucune suggestion?
Gururaj
133
Pour une raison quelconque, toutes les réponses sont toutes excessives. C'est tout ce qu'il faut:
Pour votre information, je suis sûr que ce sera grand à l'avenir quand tous les navigateurs populaires ont implémenté, cependant , ce n'est pas le cas à l' heure actuelle: developer.mozilla.org/en-US/docs/Web/API/... A au moment de l'écriture, seules les versions récentes des navigateurs Firefox et WebKit prennent en charge la propriété origin selon mes recherches.
Zac Seth
2
Juste pour terminer: l'emplacement est défini sur HTML5 et il implémente l' URLUtilsinterface qui est définie sur WHATWG et inclut l' originattribut.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5
Bonjour de 2015 .. malheureusement, URLUtils n'est toujours pas correctement implémenté dans tous les navigateurs, selon ce tableau de compatibilité sur MDN. Cependant, il semble que la propriété d'origine soit légèrement mieux prise en charge qu'en 2013, elle n'est toujours pas adaptée à la production car elle n'est pas correctement implémentée dans Safari. Désolé les gars :(
totallyNotLizards
Mise à jour: toujours pas pris en charge pour de nombreux navigateurs (safari également) :( :(
Ahmad hamza
Cela ne fonctionne pas aussi dans IE, il renvoie "non défini".
Siddhartha Chowdhury
53
Comme cela a déjà été mentionné, il n'y a pas encore de prise en charge complète, window.location.originmais au lieu de l'utiliser ou de créer une nouvelle variable à utiliser, je préfère la vérifier et si elle n'est pas définie pour la définir.
Lorsque vous ajoutez une réponse à une question plus ancienne avec des réponses existantes, il est utile d'expliquer les nouvelles informations que votre réponse apporte et de reconnaître si le passage du temps a un impact sur la réponse.
Jason Aller
8
En effet, window.location.origin fonctionne bien dans les navigateurs suivant les normes, mais devinez quoi. IE ne suit pas les normes.
Donc à cause de cela, c'est ce qui a fonctionné pour moi dans IE, FireFox et Chrome:
var full = location.protocol+'//'+location.hostname+(location.port ?':'+location.port:'');
mais pour d'éventuelles améliorations futures susceptibles de provoquer des conflits, j'ai spécifié la référence "window" avant l'objet "location".
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ?':'+window.location.port:'');
pensez à expliquer votre réponse. Ne présumez pas que l'OP peut comprendre la signification des différentes parties de votre code.
ADyson
3
Essayez d'utiliser une expression régulière (Regex), qui sera très utile lorsque vous souhaitez valider / extraire des éléments ou même effectuer une simple analyse en javascript.
Le regex est:
/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/
Manifestation:
function breakURL(url){
matches =/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/.exec(url);
foo =newArray();if(matches){for( i =1; i < matches.length ; i++){ foo.push(matches[i]);}}return foo
}
url ="https://www.google.co.uk:55699/search?q=http%3A%2F%2F&oq=http%3A%2F%2F&aqs=chrome..69i57j69i60l3j69i65l2.2342j0j4&sourceid=chrome&ie=UTF-8"
breakURL(url);// [https, www.google.co.uk, 55699]
breakURL();// []
breakURL("asf");// []
breakURL("asd://");// []
breakURL("asd://a");// [asd, a, undefined]
Maintenant, vous pouvez également effectuer la validation.
"Un schéma d'URL RFC 3986 valide doit être composé de" une lettre et suivi de n'importe quelle combinaison de lettres, chiffres, plus ("+"), point (".") Ou tiret ("-"). "- stackoverflow. com / a / 9142331/188833 (Voici une urne: ietf: rfc: 3897 (URI) / urn: ietf: rfc: 3897 (IRI) regex pour le schéma: partie d'un URI / IRI en Python: github.com/dgerber /rfc3987/blob/master/rfc3987.py#L147 )
Wes Turner
2
Réponse simple qui fonctionne pour tous les navigateurs:
/**
* Get the current URL from `window` context object.
* Will return the fully qualified URL if neccessary:
* getCurrentBaseURL(true, false) // `http://localhost/` - `https://localhost:3000/`
* getCurrentBaseURL(true, true) // `http://www.example.com` - `https://www.example.com:8080`
* getCurrentBaseURL(false, true) // `www.example.com` - `localhost:3000`
*
* @param {boolean} [includeProtocol=true]
* @param {boolean} [removeTrailingSlash=false]
* @returns {string} The current base URL.
*/exportconst getCurrentBaseURL =(includeProtocol =true, removeTrailingSlash =false)=>{if(!window ||!window.location ||!window.location.hostname ||!window.location.protocol){
console.error(`The getCurrentBaseURL function must be called from a context in which window object exists.Yet, window is ${window}`,[window, window.location, window.location.hostname, window.location.protocol],)thrownewTypeError('Whole or part of window is not defined.')}const URL =`${includeProtocol ?`${window.location.protocol}//` : ''}${window.location.hostname}${
window.location.port ?`:${window.location.port}`:''}${removeTrailingSlash ?'':'/'}`// console.log(`The URL is ${URL}`)return URL
}
Réponses:
obtenir d'abord l'adresse actuelle
Ensuite, il suffit d'analyser cette chaîne
votre URL est:
J'espère que cela t'aides
la source
location
objet n'est pas disponible (js en dehors du navigateur!)location
) mais peut être utilisé pour n'importe quelle URL. Vérifiez que c'est bien.window.location.href.split('/').slice(0, 3).join('/')
la source
about://
. Cependant, je suis curieux de savoir, quel serait le cas d'utilisationabout:blank
? Je ne sais pas si un navigateur injecte des ressources de pluginabout:blank
, mais il semble que cela pourrait être le seul cas d'utilisation.location
pour que cela fonctionne)location.host
au lieu delocation.hostname
+location.port
?Aucune de ces réponses ne semble répondre complètement à la question, qui appelle une URL arbitraire, pas spécifiquement l'URL de la page actuelle.
Méthode 1: utilisez l'API URL (mise en garde: pas de prise en charge IE11)
Vous pouvez utiliser l' API URL (non prise en charge par IE11, mais disponible partout ailleurs ).
Cela facilite également l'accès aux paramètres de recherche . Autre bonus: il peut être utilisé dans un Web Worker car il ne dépend pas du DOM.
Méthode 2 (ancienne méthode): utilisez l'analyseur intégré du navigateur dans le DOM
Utilisez-le si vous en avez besoin pour fonctionner également sur des navigateurs plus anciens.
C'est tout!
L'analyseur intégré du navigateur a déjà fait son travail. Maintenant, vous pouvez simplement saisir les pièces dont vous avez besoin (notez que cela fonctionne pour les deux méthodes ci-dessus):
Bonus: paramètres de recherche
Il y a de fortes chances que vous souhaitiez également séparer les paramètres d'URL de recherche, car '? StartIndex = 1 & pageSize = 10' n'est pas trop utilisable en soi.
Si vous avez utilisé la méthode 1 (API URL) ci-dessus, vous utilisez simplement les getters searchParams:
Ou pour obtenir tous les paramètres:
Si vous avez utilisé la méthode 2 (à l'ancienne), vous pouvez utiliser quelque chose comme ceci:
la source
var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
http
page peut-être? S'il n'est pas spécifié, il «héritera» de l'emplacement actuelhost
ethostname
. Le premier inclut le port (par exemplelocalhost:3000
), tandis que le second n'est que le nom de l'hôte (par exemplelocalhost
).Pour une raison quelconque, toutes les réponses sont toutes excessives. C'est tout ce qu'il faut:
Plus de détails peuvent être trouvés ici: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties
la source
URLUtils
interface qui est définie sur WHATWG et inclut l'origin
attribut.Comme cela a déjà été mentionné, il n'y a pas encore de prise en charge complète,
window.location.origin
mais au lieu de l'utiliser ou de créer une nouvelle variable à utiliser, je préfère la vérifier et si elle n'est pas définie pour la définir.Par exemple;
J'ai écrit à ce sujet il y a quelques mois Un correctif pour window.location.origin
la source
window.location.origin
existe. Je vous remercie. ^^hôte
Retour
localhost:2679
nom d'hôte
Retour
localhost
la source
localhost/
lieu delocalhost:3000
.window.location.origin
sera suffisant pour obtenir la même chose.la source
Cela signifie que si vous souhaitez obtenir uniquement la partie HTTP / HTTPS, vous pouvez faire quelque chose comme ceci:
Pour le domaine, vous pouvez utiliser:
Pour le port, vous pouvez utiliser:
Gardez à l'esprit que le port sera une chaîne vide s'il n'est pas visible dans l'URL. Par exemple:
Si vous devez afficher 80/443 lorsque vous n'avez pas d'utilisation de port
la source
Pourquoi ne pas utiliser:
la source
En effet, window.location.origin fonctionne bien dans les navigateurs suivant les normes, mais devinez quoi. IE ne suit pas les normes.
Donc à cause de cela, c'est ce qui a fonctionné pour moi dans IE, FireFox et Chrome:
mais pour d'éventuelles améliorations futures susceptibles de provoquer des conflits, j'ai spécifié la référence "window" avant l'objet "location".
la source
Voici la solution que j'utilise:
ÉDITER:
Pour ajouter la compatibilité entre navigateurs, utilisez ce qui suit:
la source
window.location.host
n'est peut-être pas le meilleur navigateurla source
la source
Essayez d'utiliser une expression régulière (Regex), qui sera très utile lorsque vous souhaitez valider / extraire des éléments ou même effectuer une simple analyse en javascript.
Le regex est:
Manifestation:
Maintenant, vous pouvez également effectuer la validation.
la source
Réponse simple qui fonctionne pour tous les navigateurs:
la source
Style ES6 avec paramètres configurables.
la source
window.location.protocol + '//' + window.location.host
la source