Eu gostaria de pegar uma corda
var a = "http://example.com/aa/bb/"
e processá-lo em um objeto tal que
a.hostname == "example.com"
e
a.pathname == "/aa/bb"
javascript
url
freddiefujiwara
fonte
fonte
hostname
epathname
diretamente dolocation
objeto.Respostas:
A maneira moderna:
Retorna um objeto com propriedades
hostname
epathname
, junto com alguns outros .O primeiro argumento é uma URL relativa ou absoluta; se for relativo, você precisará especificar o segundo argumento (o URL base). Por exemplo, para um URL relativo à página atual:
Além dos navegadores, esta API também está disponível no Node.js. desde a v7 até
require('url').URL
.fonte
new URL('/stuff?foo=bar#baz')
->SyntaxError: Failed to construct 'URL': Invalid URL
fonte
pathname
remove a barra principal, enquanto os outros navegadores não. Então, você terminará com/path
oupath
, dependendo do seu navegador.encontrado aqui: https://gist.github.com/jlong/2428561
fonte
parser = location;
e todas as linhas a seguir funcionam. Tentei no Chrome e IE9 agora.pathname
não inclui a barra principal no IE. Vai saber. : Dhttp:
mesmo se você passar apenasdomain.com
para href (sem nenhum protocolo). Eu queria usar isso para verificar se o protocolo estava ausente e, se sim, poderia adicioná-lo, mas ele pressupõe que http: portanto, não foi possível usá-lo para esse fim.Aqui está uma função simples usando um regexp que imita o
a
comportamento da tag.Prós
Contras
-
-
EDITAR:
Aqui está um detalhamento da expressão regular
fonte
retorna o currentUrl.
Se você deseja passar sua própria string como um URL ( não funciona no IE11 ):
Então você pode analisá-lo como:
fonte
A resposta de freddiefujiwara é muito boa, mas eu também precisava oferecer suporte a URLs relativos no Internet Explorer. Eu vim com a seguinte solução:
Agora use-o para obter as propriedades necessárias:
Exemplo do JSFiddle: http://jsfiddle.net/6AEAB/
fonte
var locationHost = (location.port !== '80' && location.port !== '443') ? location.host : location.hostname;
var locationOrigin = location.protocol + '//' + locationHost;
js-uri (disponível no Google Code) pega um URL de string e resolve um objeto URI a partir dele:
fonte
E a expressão regular simples?
fonte
//user:[email protected]/path/x?y=z
e você verá por que a expressão regular simples não é suficiente. Agora jogue algo inválido e deve sair de maneira previsível também.hoje eu encontrei esse problema e encontrei: URL - MDN Web APIs
Este retorno:
Esperando que minha primeira contribuição o ajude!
fonte
Aqui está uma versão que copiei de https://gist.github.com/1847816 , mas reescrevi para facilitar a leitura e a depuração. O objetivo de copiar os dados da âncora para outra variável chamada "resultado" é porque os dados da âncora são bastante longos e, portanto, copiar um número limitado de valores para o resultado ajudará a simplificar o resultado.
fonte
A análise de URL entre navegadores , soluciona o problema de caminho relativo para o IE 6, 7, 8 e 9:
Uso ( demo JSFiddle aqui ):
Resultado:
fonte
Para quem procura uma solução moderna que funcione no IE, Firefox e Chrome:
Nenhuma dessas soluções que usam um elemento de hiperlink funcionará da mesma maneira no chrome. Se você passar um URL inválido (ou em branco) para o chrome, ele sempre retornará o host de onde o script é chamado. Portanto, no IE, você ficará em branco, enquanto no Chrome, você receberá o host local (ou o que for).
Se você está tentando olhar para o referenciador, isso é enganoso. Você quer ter certeza de que o host que você voltou estava no URL original para lidar com isso:
fonte
A maneira do AngularJS - brinque aqui: http://jsfiddle.net/PT5BG/4/
fonte
$document
e$window
serviçosSolução simples e robusta usando o padrão do módulo. Isso inclui uma correção para o IE, na qual
pathname
nem sempre há uma barra invertida (/
).Eu criei um Gist junto com um JSFiddle que oferece um analisador mais dinâmico. Eu recomendo que você dê uma olhada e forneça feedback.
Demo
Mostrar snippet de código
Resultado
fonte
Use https://www.npmjs.com/package/uri-parse-lib para isso
fonte
Por que não o usa?
fonte
Você também pode usar a
parse_url()
função do projeto Locutus (antigo php.js).Código:
Resultado:
fonte
Funciona com URLs absolutos e relativos
fonte
abc://username:[email protected]:123/path/data?key=value&key2=value2#fragid1
Pare de reinventar a roda. Use https://github.com/medialize/URI.js/
fonte
Basta usar a biblioteca url.js (para web e node.js).
https://github.com/websanova/js-url
fonte
um hack simples com a primeira resposta
isso pode ser usado mesmo sem argumento para descobrir o nome do host atual getLocation (). nome do host fornecerá o nome do host atual
fonte