Preciso extrair o protocolo, o domínio e a porta completos de um determinado URL. Por exemplo:
https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
Preciso extrair o protocolo, o domínio e a porta completos de um determinado URL. Por exemplo:
https://localhost:8181/ContactUs-1.0/contact?lang=it&report_type=consumer
>>>
https://localhost:8181
Respostas:
primeiro obtenha o endereço atual
var url = window.location.href
Então basta analisar essa string
var arr = url.split("/");
seu URL é:
var result = arr[0] + "//" + arr[2]
Espero que isto ajude
location
objeto não está disponível (JS navegador fora!)
location
), mas pode ser usado para qualquer URL. Confira, é legal.
window.location.href.split('/').slice(0, 3).join('/')
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
about://
. No entanto, estou curioso para saber, qual seria o caso de uso about:blank
? Não tenho certeza se algum navegador injeta recursos de plug-in about:blank
, mas parece que esse pode ser o único caso de uso.
location
para este ao trabalho)
location.host
vez de location.hostname
+ location.port
?
Nenhuma dessas respostas parece abordar completamente a pergunta, que exige um URL arbitrário, não especificamente o URL da página atual.
Você pode usar a API da URL (não suportada pelo IE11, mas disponível em qualquer outro lugar ).
Isso também facilita o acesso aos parâmetros de pesquisa . Outro bônus: pode ser usado em um Web Worker, pois não depende do DOM.
const url = new URL('http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
Use isso se você precisar que ele funcione em navegadores antigos também.
// 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');
O analisador interno do navegador já fez seu trabalho. Agora você pode simplesmente pegar as partes necessárias (observe que isso funciona para os dois métodos acima):
// 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:'
É provável que você também queira separar os parâmetros dos URLs de pesquisa, já que '? StartIndex = 1 & pageSize = 10' não é muito utilizável por si só.
Se você usou o Método 1 (URL API) acima, basta usar os getters searchParams:
url.searchParams.get('startIndex'); // '1'
Ou para obter todos os parâmetros:
function searchParamsToObj(searchParams) {
const paramsMap = Array
.from(url.searchParams)
.reduce((params, [key, val]) => params.set(key, val), new Map());
return Object.fromEntries(paramsMap);
}
searchParamsToObj(url.searchParams);
// -> { startIndex: '1', pageSize: '10' }
Se você usou o Método 2 (da maneira antiga), pode usar algo como isto:
// 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' }
var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
http
página, talvez? Se não for especificado ele vai 'herdar' a partir da localização atual
host
e hostname
. O primeiro inclui a porta (por exemplo localhost:3000
), enquanto o último é apenas o nome do host (por exemplo localhost
).
Por alguma razão, todas as respostas são todas exageradas. É tudo o que é preciso:
window.location.origin
Mais detalhes podem ser encontrados aqui: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties
URLUtils
interface definida no WHATWG e inclui o origin
atributo
Como já foi mencionado, existe ainda o suporte total window.location.origin
mas, em vez de usá-lo ou criar uma nova variável para uso, prefiro procurá-lo e se não estiver definido para configurá-lo.
Por exemplo;
if (!window.location.origin) {
window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}
Na verdade, eu escrevi sobre isso há alguns meses. Uma correção para window.location.origin
window.location.origin
existe. Obrigado. ^^
hospedeiro
var url = window.location.host;
retorna localhost:2679
nome de anfitrião
var url = window.location.hostname;
retorna localhost
localhost/
vez de localhost:3000
.
window.location.origin
será suficiente para obter o mesmo.
A propriedade protocol define ou retorna o protocolo da URL atual, incluindo os dois pontos (:).
Isso significa que se você deseja obter apenas a parte HTTP / HTTPS, pode fazer algo assim:
var protocol = window.location.protocol.replace(/:/g,'')
Para o domínio você pode usar:
var domain = window.location.hostname;
Para a porta você pode usar:
var port = window.location.port;
Lembre-se de que a porta será uma cadeia vazia se não estiver visível no URL. Por exemplo:
Se você precisar mostrar 80/443 quando não tiver porta, use
var port = window.location.port || (protocol === 'https' ? '443' : '80');
Por que não usar:
let full = window.location.origin
De fato, window.location.origin funciona bem em navegadores seguindo padrões, mas adivinhem. O IE não está seguindo os padrões.
Então, por isso, foi o que funcionou para mim no IE, FireFox e Chrome:
var full = location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '');
mas, para possíveis aprimoramentos futuros que possam causar conflitos, especifiquei a referência "window" antes do objeto "location".
var full = window.location.protocol+'//'+window.location.hostname+(window.location.port ? ':'+window.location.port: '');
Aqui está a solução que estou usando:
const result = `${ window.location.protocol }//${ window.location.host }`;
EDITAR:
Para adicionar compatibilidade entre navegadores, use o seguinte:
const result = `${ window.location.protocol }//${ window.location.hostname + (window.location.port ? ':' + window.location.port: '') }`;
window.location.host
pode não ser o melhor cross-browser
var http = location.protocol;
var slashes = http.concat("//");
var host = slashes.concat(window.location.hostname);
var getBasePath = function(url) {
var r = ('' + url).match(/^(https?:)?\/\/[^/]+/i);
return r ? r[0] : '';
};
Tente usar uma expressão regular (Regex), que será bastante útil quando você deseja validar / extrair itens ou até mesmo fazer uma análise simples em javascript.
O regex é:
/([a-zA-Z]+):\/\/([\-\w\.]+)(?:\:(\d{0,5}))?/
Demonstração:
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]
Agora você pode fazer a validação também.
Resposta simples que funciona para todos os navegadores:
let origin;
if (!window.location.origin) {
origin = window.location.protocol + "//" + window.location.hostname +
(window.location.port ? ':' + window.location.port: '');
}
origin = window.location.origin;
/**
* 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
}