En HTML, hay muchas URL comunes:
URL relativa:
Ejemplo.php
demo/ejemplo.php
./example.php
../../example.php
/example.php
URL absoluta:
http://dancewithnet.com/example.php
http://dancewithnet.com:80/example.php
https://dancewithnet.com/example.php
Al mismo tiempo, hay una gran cantidad de valores de atributos de elementos en el HTML. En general, hay dos formas de obtener estos valores de atributos de URL usando JavaScript:
<a href = ejemplo.php id = ejemplo-a> en este momento la página es absolutamente url http://dancewithnet.com/ </a>
<script>
var oa = document.getElementById ('Ejemplo-a');
oa.href == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href') == 'Ejemplo.php';
</script>
Esperamos obtener una URL absoluta completa accediendo directamente a los atributos y obtener su valor de atributo original a través del método getAttribute. De hecho, este es un resultado relativamente ideal. Entre todos los navegadores de nivel A, solo Firefox e IE8 pueden obtener con éxito este resultado. Otros navegadores tienen circunstancias más o menos especiales. Para atributos específicos de qué elementos tienen qué tipo de condiciones, consulte el ejemplo de demostración .
El problema en la mayoría de los navegadores es que ambos métodos devuelven el valor del atributo original, mientras que en las aplicaciones reales, lo que a menudo se necesita es su URL absoluta. La solución en "tratar con valores HREF no calificados" es demasiado compleja. Aquí hay una solución relativamente simple. Será muy simple si no considera la diferencia entre el código del navegador:
<form de acción = ejemplo.php id = ejemplo-forma>
En este momento, la página es absolutamente url http://dancewithnet.com/ </form>
<script>
var oform = document.getElementById ('Ejemplo-form');
// IE6, IE7, Safari, Chrome, Opera
oform.action == 'Ejemplo.php';
oa.getAttribute ('Action') == 'Ejemplo.php';
// Solución genérica para obtener URL absoluta
getQualifyUrl (Oform, 'Action') == 'http://dancewithnet.com/example.php';
getQualifyUrl = function (OEL, SATTR) {
var surl = oel [sattr],
sobredosis,
bdo = falso;
// ¿Es una versión antes de IE8?
//http://www.thespanner.co.uk/2009/01/29/detecting-browsers-javaScript-hacks/
//http://msdn.microsoft.com/en-us/library/7KX09CT1%28VS.80%29.aspx
/*@cc_on
intentar{
bdo = @_jscript_version <5.8? Verdadero: @false;
} catch (e) {
bdo = falso;
}
@*/
// Si es Safari, Chrome y Opera
if (/a /.__ proto __ == '//' || /source/.test((/a/.ToString+ ''))
|| /^function /( /. test ([]. sort)) {
bdo = verdadero;
}
if (bdo) {
od = document.createElement ('div');
/*
// Los resultados obtenidos por la operación DOM no cambiarán
var oa = document.createElement ('a');
oa.href = oel [sattr];
OD.AppendChild (OA);
*/
od.innerhtml = ['<a href =', surl, '> </a>'] .Join ('');
surl = od.firstchild.href;
}
regresar surl;
}
</script>
Hay algunas cosas más interesantes en los dos navegadores prehistóricos, IE6 e IE7. Los valores de atributo obtenidos por los dos métodos en los elementos HTML A, área e IMG son URL absolutos. Afortunadamente, Microsoft proporciona un segundo parámetro para GetAttribute para resolver este problema, y también puede resolver el problema de devolver los atributos originales para los elementos Ifeam y Link:
<link href = ../../ejemplo.css id = ejemplo-link>
<a href = ejemplo.php id = ejemplo-a> en este momento la página es absolutamente url http://dancewithnet.com/ </a>
<script>
var oa = document.getElementById ('Ejemplo-a'),
olink = document.getElementById ('Ejemplo-a');
oa.href == 'http://dancewithnet.com/example.php';
oa.getattribute ('href') == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href', 2) == 'Ejemplo.php';
olink.href == 'Ejemplo.php';
olink.getAttribute ('href') == 'ejemplo.php';
olink.getAttribute ('href', 4) == 'http://dancewithnet.com/example.php';
</script>