No HTML, existem muitos URLs comuns:
URL relativo:
exemplo.php
demonstração/exemplo.php
./example.php
../../example.php
/example.php
URL absoluto:
http://dancewithnet.com/example.php
http://dancewithnet.com:80/example.php
https://dancewithnet.com/example.php
Ao mesmo tempo, há um grande número de valores de atributo de elemento no HTML. Geralmente, existem duas maneiras de obter esses valores de atributo de URL usando JavaScript:
<a href = exemplo.php id = exemplo-a> neste momento a página é absolutamente url http://dancewithnet.com/ </a>
<Cript>
var oa = document.getElementById ('exemplo-a');
OA.href == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href') == 'exemplo.php';
</script>
Esperamos obter um URL absoluto completo acessando diretamente os atributos e obtendo seu valor de atributo original através do método GetAttribute. De fato, este é um resultado relativamente ideal. Entre todos os navegadores de nível A, apenas o Firefox e o IE8 podem obter com sucesso esse resultado. Outros navegadores têm circunstâncias mais ou menos especiais. Para atributos específicos de quais elementos têm que tipo de condições, consulte o exemplo de demonstração .
O problema na maioria dos navegadores é que ambos os métodos retornam o valor do atributo original, enquanto nas aplicações reais, o que geralmente é necessário é o seu URL absoluto. A solução em "lidar com valores não qualificados de HREF" é muito complexa. Aqui está uma solução relativamente simples. Será muito simples se você não considerar a diferença entre o código do navegador:
<forma de ação = exemplo.php id = exemplo-form>
Neste momento, a página é absolutamente url http://dancewithnet.com/ </morm>
<Cript>
var oform = document.getElementById ('exemplo de forma de exemplo');
// IE6, IE7, Safari, Chrome, Opera
OFORM.ACTION == 'exemplo.php';
oa.getAttribute ('ação') == 'exemplo.php';
// Solução genérica para obter URL absoluto
getQualifyUrl (OFORM, 'Action') == 'http://dancewithnet.com/example.php';
getqualifyurl = function (oel, sattr) {
var surl = oel [SATTR],
OD,
bdo = false;
// é uma versão antes do IE8?
//http://www.thepanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/
//http://msdn.microsoft.com/en-us/library/7kx09ct1%28vs.80%29.aspx
/*@cc_on
tentar{
bdo = @_jscript_version <5.8? true: @false;
} catch (e) {
bdo = false;
}
@*/
// Se for Safari, Chrome e Opera
if (/a /.__ proto __ == '//' || /source/.test(/a/.tostring+ ''))
|| /^function /( /. Test ([]. Sort)) {
bdo = true;
}
if (bdo) {
OD = document.createElement ('div');
/*
// Os resultados obtidos pela operação DOM não mudarão
var oa = document.createElement ('a');
OA.HREF = OEL [SATTR];
od.appendChild (OA);
*/
od.innerhtml = ['<a href =', surl, '> </a>'] .Join ('');
surl = od.firstchild.href;
}
retornar surl;
}
</script>
Há algumas coisas mais interessantes nos dois navegadores pré -históricos, IE6 e IE7. Os valores de atributo obtidos pelos dois métodos nos elementos HTML A, área e IMG são URLs absolutos. Felizmente, a Microsoft fornece um segundo parâmetro para GetAttribute para resolver esse problema e também pode resolver o problema de retornar os atributos originais para os elementos IFEAM e Link:
<link href = ../../exemplo.css id = exemplo-link>
<a href = exemplo.php id = exemplo-a> neste momento a página é absolutamente url http://dancewithnet.com/ </a>
<Cript>
var oa = document.getElementById ('exemplo-a'),
olink = document.getElementById ('exemplo-a');
OA.href == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href') == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href', 2) == 'exemplo.php';
olink.href == 'exemplo.php';
olink.getAttribute ('href') == 'exemplo.php';
olink.getAttribute ('href', 4) == 'http://dancewithnet.com/example.php';
</script>