@Randomblue What about it? Você receberá 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.
Shef
3
Isso não funciona se você tiver uma string de URL, certo? (ou seja, você precisa estar emlocation para este ao trabalho)
Método 2 (maneira antiga): use o analisador interno do navegador no DOM
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');
É isso aí!
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:'
Bônus: pesquisar parâmetros
É 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:
link.protocol recebe um "http:" se eu inspecionar um anker com "google.com" :-(var link = document.createElement('a'); link.setAttribute('href', 'google.com'); console.log(link.protocol)
eXe
Você está fazendo isso em uma httppágina, talvez? Se não for especificado ele vai 'herdar' a partir da localização atual
Stijn de Witt
4
Essa é uma resposta fantástica e deve receber mais votos, porque essa resposta não se limita apenas ao local atual , mas funciona para qualquer URL , e porque essa resposta utiliza o analisador interno do navegador em vez de criar um nós mesmos (o que não podemos espero fazer tão bem ou tão rápido!).
Stijn de Witt
Obrigado por este truque inteligente! Gostaria de acrescentar uma coisa: existem ambos hoste hostname. O primeiro inclui a porta (por exemplo localhost:3000), enquanto o último é apenas o nome do host (por exemplo localhost).
Codificador 31/03
Isso funciona bem em caso de URL absoluto. Falha no caso de URL relativo e entre navegadores. Alguma sugestão?
Gururaj
133
Por alguma razão, todas as respostas são todas exageradas. É tudo o que é preciso:
FYI, eu tenho certeza que isso vai ser grande no futuro, quando todos os navegadores populares implementaram-lo, no entanto , este não é o caso no momento: developer.mozilla.org/en-US/docs/Web/API/... No No momento em que escrevi, apenas as versões recentes dos navegadores Firefox e WebKit suportam a propriedade origin de acordo com minha pesquisa.
Olá a partir de 2015 .. infelizmente o URLUtils ainda não foi implementado corretamente em todos os navegadores, de acordo com esta tabela de compatibilidade no MDN. No entanto, parece que a propriedade de origem é um pouco melhor suportada do que em 2013, ainda não é adequada para produção , pois não foi implementada corretamente no Safari. Desculpe pessoal :(
totallyNotLizards
Atualização: Ainda não há suporte para muitos navegadores (também safari) :( :(
Ahmad hamza
Também não funciona no IE, retorna "indefinido".
Siddhartha Chowdhury
53
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.
Ao adicionar uma resposta a uma pergunta mais antiga com as respostas existentes, é útil explicar que novas informações sua resposta traz e reconhecer se a passagem do tempo afeta a resposta.
21719 Jason Aller
8
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:'');
considere explicar sua resposta. Não presuma que o OP possa entender o significado das diferentes partes do seu código.
ADyson 9/09/16
3
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 =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]
"Um esquema de URL RFC 3986 válido deve consistir em" uma letra e seguido por qualquer combinação de letras, dígitos, mais ("+"), ponto final (".") Ou hífen ("-"). "- stackoverflow. com / a / 9142331/188833 (Aqui está uma urna: ietf: rfc: 3897 (URI) / urn: ietf: rfc: 3897 (IRI) para o esquema: parte de um URI / IRI em Python: github.com/dgerber /rfc3987/blob/master/rfc3987.py#L147 )
Wes Turner
2
Resposta simples que funciona para todos os navegadores:
/**
* 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
}
Respostas:
primeiro obtenha o endereço atual
Então basta analisar essa string
seu URL é:
Espero que isto ajude
fonte
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('/')
fonte
about://
. No entanto, estou curioso para saber, qual seria o caso de usoabout:blank
? Não tenho certeza se algum navegador injeta recursos de plug-inabout:blank
, mas parece que esse pode ser o único caso de uso.location
para este ao trabalho)location.host
vez delocation.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.
Método 1: usar a API da URL (ressalva: sem suporte ao IE11)
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.
Método 2 (maneira antiga): use o analisador interno do navegador no DOM
Use isso se você precisar que ele funcione em navegadores antigos também.
É isso aí!
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):
Bônus: pesquisar parâmetros
É 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:
Ou para obter todos os parâmetros:
Se você usou o Método 2 (da maneira antiga), pode usar algo como isto:
fonte
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 atualhost
ehostname
. O primeiro inclui a porta (por exemplolocalhost:3000
), enquanto o último é apenas o nome do host (por exemplolocalhost
).Por alguma razão, todas as respostas são todas exageradas. É tudo o que é preciso:
Mais detalhes podem ser encontrados aqui: https://developer.mozilla.org/en-US/docs/Web/API/window.location#Properties
fonte
URLUtils
interface definida no WHATWG e inclui oorigin
atributoComo 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;
Na verdade, eu escrevi sobre isso há alguns meses. Uma correção para window.location.origin
fonte
window.location.origin
existe. Obrigado. ^^hospedeiro
retorna
localhost:2679
nome de anfitrião
retorna
localhost
fonte
localhost/
vez delocalhost:3000
.window.location.origin
será suficiente para obter o mesmo.fonte
Isso significa que se você deseja obter apenas a parte HTTP / HTTPS, pode fazer algo assim:
Para o domínio você pode usar:
Para a porta você pode usar:
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
fonte
Por que não usar:
fonte
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:
mas, para possíveis aprimoramentos futuros que possam causar conflitos, especifiquei a referência "window" antes do objeto "location".
fonte
Aqui está a solução que estou usando:
EDITAR:
Para adicionar compatibilidade entre navegadores, use o seguinte:
fonte
window.location.host
pode não ser o melhor cross-browserfonte
fonte
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 é:
Demonstração:
Agora você pode fazer a validação também.
fonte
Resposta simples que funciona para todos os navegadores:
fonte
Estilo ES6 com parâmetros configuráveis.
fonte
window.location.protocol + '//' + window.location.host
fonte