In HTML gibt es viele gemeinsame URLs:
Relative URL:
Beispiel.Php
Demo/Beispiel.php
./example.php
../../example.php
/example.php
Absolute URL:
http://dancewithnet.com/example.php
http://dancewithnet.com:80/example.php
https://dancewithnet.com/example.php
Gleichzeitig gibt es eine große Anzahl von Elementattributwerten in der HTML. Im Allgemeinen gibt es zwei Möglichkeiten, diese URL -Attributwerte mit JavaScript zu erhalten:
<a href = example.php id = example-a> zu diesem Zeitpunkt ist die Seite absolut url http://dancewithnet.com/ </a>
<Script>
var oa = document.getElementById ('Beispiel-a');
oa.href == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href') == 'example.php';
</script>
Wir hoffen, eine vollständige absolute URL zu erhalten, indem wir direkt auf Attribute zugreifen und ihren ursprünglichen Attributwert über die GetAttribute -Methode erhalten. Tatsächlich ist dies ein relativ ideales Ergebnis. Unter allen Browsern auf A-Level können nur Firefox und IE8 dieses Ergebnis erfolgreich erzielen. Andere Browser haben mehr oder weniger besondere Umstände. Für spezifische Attribute, von denen Elemente über die Art von Bedingungen verfügen, finden Sie im Demonstrationsbeispiel .
Das Problem in den meisten Browsern ist, dass beide Methoden den ursprünglichen Attributwert zurückgeben, während in den tatsächlichen Anwendungen häufig seine absolute URL benötigt wird. Die Lösung in "Umgang mit nicht qualifizierten HREF -Werten" ist zu komplex. Hier ist eine relativ einfache Lösung. Es wird sehr einfach sein, wenn Sie den Unterschied zwischen dem Browsercode nicht berücksichtigen:
<form action = Beispiel.php id = Beispielform>
Zu diesem Zeitpunkt ist die Seite absolut url http://dancewithnet.com/ </form>
<Script>
var Oform = document.getElementById ('Beispielform');
// IE6, IE7, Safari, Chrome, Opera
OFOrM.Action == 'Beispiel.php';
oa.getAttribute ('action') == 'example.php';
// Generische Lösung, um absolute URL zu erhalten
GetQualifyUrl (Oform, 'Aktion') == 'http://dancewithnet.com/example.php';
GetQualifyUrl = Funktion (oel, sattr) {
var surl = oel [sattr],
OD,
bdo = false;
// Ist es eine Version vor 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
versuchen{
BDO = @_JScript_VERSION <5.8? TRUE: @FALSE;
} catch (e) {
bdo = false;
}
@*/
// Wenn es sich um Safari, Chrome und Opera handelt
if (/a /.__ proto __ == '//' || /Source/.test(/a/.toString+ ''))))
|| /^Funktion /( /. test ([]. sortieren)) {
bdo = true;
}
if (bdo) {
od = document.createelement ('div');
/*
// Die im DOM -Vorgang erzielten Ergebnisse ändern sich nicht
var oa = document.createelement ('a');
oa.href = oel [sattr];
OD.Appendchild (OA);
*/
od.innerhtml = ['<a href =', surl, '> </a>'] .Join ('');
surl = od.firstchild.href;
}
Rückkehr Surl;
}
</script>
In den beiden prähistorischen Browsern, IE6 und IE7, gibt es noch einige interessante Dinge. Die Attributwerte, die von den beiden Methoden in den HTML -Elementen A, Fläche und IMG erhalten wurden, sind absolute URLs. Glücklicherweise bietet Microsoft einen zweiten Parameter für GetAttribute zur Lösung dieses Problems und kann auch das Problem lösen, die ursprünglichen Attribute für die IFEAM- und Link -Elemente zurückzugeben:
<link href = ../../example.css id = Beispiel-Link>
<a href = example.php id = example-a> zu diesem Zeitpunkt ist die Seite absolut url http://dancewithnet.com/ </a>
<Script>
var oa = document.getElementById ('Beispiel-a'),
olink = document.getElementById ('Beispiel-a');
oa.href == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href') == 'http://dancewithnet.com/example.php';
oa.getAttribute ('href', 2) == 'Beispiel.php';
olink.href == 'Beispiel.php';
olink.getAttribute ('href') == 'example.php';
olink.getAttribute ('href', 4) == 'http://dancewithnet.com/example.php';
</script>