web-dev-qa-db-fra.com

Obtenir le protocole, le domaine et le port de l'URL

J'ai besoin d'extraire le protocole complet, le domaine et le port d'une URL donnée. Par exemple:

https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
251
yelo3

d'abord obtenir l'adresse actuelle

var url = window.location.href

Ensuite, il suffit d'analyser cette chaîne

var arr = url.split("/");

votre url est:

var result = arr[0] + "//" + arr[2]

J'espère que cela t'aides

124
wezzy
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
500
Shef

Aucune de ces réponses ne semble aborder complètement la question, qui appelle une URL arbitraire, pas spécifiquement l'URL de la page actuelle.

Méthode 1: Utiliser l'API URL (mise en garde: pas de support IE11)

Vous pouvez utiliser le URL API (non pris en charge par IE11, mais disponible partout ailleurs ).

Cela facilite également l'accès à paramètres de recherche . Un autre avantage: il peut être utilisé dans un Web Worker car il ne dépend pas du DOM.

const url = new URL('http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');

Méthode 2 (ancienne méthode): Utiliser l'analyseur intégré du navigateur dans le DOM

Utilisez ceci si vous en avez besoin pour fonctionner également sur les 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 récupérer 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 est probable que vous souhaiterez probablement également séparer les paramètres de l'URL de recherche, car '? StartIndex = 1 & pageSize = 10' n'est pas trop utilisable en soi.

Si vous avez utilisé la méthode 1 (URL API) ci-dessus, utilisez simplement les getters de searchParams:

url.searchParams.get('searchIndex');  // '1'

Ou pour obtenir tous les paramètres:

Array
    .from(url.searchParams)
    .reduce((accum, [key, val]) => {
        accum[key] = val;
        return accum;
    }, {});
// -> { startIndex: '1', pageSize: '10' }

Si vous avez utilisé la méthode 2 (à l'ancienne), vous pouvez utiliser quelque chose comme ceci:

// Simple object output (note: does NOT preserve duplicate keys).
var params = url.search.substr(1); // remove '?' prefix
params
    .split('&')
    .reduce((accum, keyval) => {
        const [key, val] = keyval.split('=');
        accum[key] = val;
        return accum;
    }, {});
// -> { startIndex: '1', pageSize: '10' }
148
David Calhoun

Pour une raison quelconque, toutes les réponses sont toutes excessives. C'est tout ce qu'il faut:

window.location.Origin

Plus de détails peuvent être trouvés ici: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties

111
Pijusn

Comme cela a déjà été mentionné, le window.location.Origin n'est pas encore totalement supporté, mais au lieu de l'utiliser ou de créer une nouvelle variable à utiliser, je préfère le vérifier et s'il n'est pas configuré pour le définir.

Par exemple;

if (!window.location.Origin) {
  window.location.Origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

En fait, j'ai écrit à ce sujet il y a quelques mois Un correctif pour window.location.Origin

49
Toby

Hôte

var url = window.location.Host;

renvoie localhost:2679

nom d'hôte

var url = window.location.hostname;

renvoie localhost

28
Miroslav Holec

La propriété protocol définit ou retourne le protocole de l'URL actuelle, y compris les deux points (:).

Cela signifie que si vous voulez obtenir uniquement la partie HTTP/HTTPS, vous pouvez faire quelque chose comme ceci:

var protocol = window.location.protocol.replace(/:/g,'')

Pour le domaine, vous pouvez utiliser:

var domain = window.location.hostname;

Pour le port, vous pouvez utiliser:

var port = window.location.port;

Gardez à l'esprit que le port sera une chaîne vide si elle n'est pas visible dans l'URL. Par exemple:

Si vous devez afficher 80/443 lorsque vous n'avez pas d'utilisation de port

var port = window.location.port || (protocol === 'https' ? '443' : '80');

En effet, window.location.Origin fonctionne bien dans les navigateurs respectant les normes, mais devinez quoi. IE ne respecte pas les normes.

Donc, à cause de cela, voici 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 "fenêtre" avant l'objet "emplacement".

var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ? ':'+window.location.port: '');
6
cpu

window.location.Origin sera suffisant pour obtenir le même.

5
int soumen
var getBasePath = function(url) {
    var r = ('' + url).match(/^(https?:)?\/\/[^/]+/i);
    return r ? r[0] : '';
};
2
haipeng

Essayez d’utiliser une expression régulière (Regex), ce qui sera très utile lorsque vous souhaitez valider/extraire des éléments ou même effectuer une analyse simple en javascript.

La regex est: 

/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/

Manifestation:

function breakURL(url){

     matches = /([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/.exec(url);

     foo = new Array();

     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 aussi faire la validation.

2
ed9w2in6
var http = location.protocol;
var slashes = http.concat("//");
var Host = slashes.concat(window.location.hostname);
2
Elankeeran

Voici la solution que j'utilise:

const result = `${ window.location.protocol }//${ window.location.Host }`;
0
JulienRioux

Réponse simple qui fonctionne pour tous les navigateurs:

let Origin;

if (!window.location.Origin) {
  Origin = window.location.protocol + "//" + window.location.hostname + 
     (window.location.port ? ':' + window.location.port: '');
}

Origin = window.location.Origin;
0
Mike Hawes

Pourquoi ne pas utiliser:

let full = window.location.Origin
0
Maik de Kruif

Style ES6 avec paramètres configurables.

/**
 * 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.
 */
export const 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],
    )
    throw new TypeError('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
}
0
Sébastien

window.location.protocol + '//' + window.location.Host

0
Code_Worm