英文:A链接标记ie下会自动补全href.
Bei der Arbeit am Ajax Link Tracker und MapSurface bin ich auf eine Inkonsistenz bei der Art und Weise gestoßen, wie das href-Attribut mithilfe von DOM-Scripting abgerufen wird.
Das href-Attribut unterscheidet sich von anderen Elementattributen darin, dass der festgelegte Wert relativ zum Kontext der Seiten-URL sein kann. Wenn Sie einen Link mit einem relativen href-Attribut festlegen
Testseite
Der Browser prüft die aktuelle URL der Seite und leitet eine absolute URL für den Link ab.
http://www.glenn.jones.net/development/test1.html
Das ist die Ursache des Problems. Einige Browser geben den Text des Attributs zurück und andere geben die abgeleitete absolute URL zurück. Die Ergebnisse unterscheiden sich auch je nach der Methode, die Sie zum Abrufen des href-Attributs verwenden. Es gibt drei gängige Möglichkeiten, auf ein Attribut zuzugreifen:
linkobj.href;
linkobj[‘href’];
linkobj.getAttribute(‘href’);
Die Methoden
linkobj.href
und
linkobj[‘href’];
für den Zugriff auf das Attribut geben konsistent die abgeleitete absolute URL zurück.
Microsoft hat versucht, dieses Problem zu beheben, indem es
Problem einen zweiten Parameter zur getAttribute-Methode hinzugefügt hat. Der zweite Parameter kann auf 0,1 oder 2 gesetzt werden. Wenn der Parameter auf 2 gesetzt ist, gibt die Methode den Attributtext zurück. Bei jeder anderen Einstellung wird die abgeleitete absolute URL zurückgegeben.
linkobj.getAttribute(‘href’);
linkobj.getAttribute(‘href’,2);
|
|
Abgeleitete Absolute URL |
Attributtext |
IE
linkobj.href;
x
IE
linkobj.getAttribute(‘href’);
x
IE
linkobj.getAttribute(‘href’,2);
x
Gecko
linkobj.href;
x
Gecko
linkobj.getAttribute(‘href’);
x
Gecko
linkobj.getAttribute(‘href’,2);
x
Oper
linkobj.href;
x
Oper
linkobj.getAttribute(‘href’);
x
Oper
linkobj.getAttribute(‘href’,2);
x
Attributtestseite abrufen Testen Sie auf IE6, Firefox 1.5 und Opera 8.51.
Was sollte also von der getAttribute-Methode zurückgegeben werden?
Die W3C DOM Level 2 Core-Spezifikation, die die Struktur der getAttribute-Methode festlegt, deckt dieses Problem nicht ab. Es ist nicht so, dass einer der beiden Ansätze falsch oder richtig ist. In diesem Punkt ist die Spezifikation offen für Interpretationen.
Als Programmierer möchte ich auf beide Werte zugreifen können. Die DOM Core-Spezifikation sollte aktualisiert werden, um das Problem zu beheben.
Nach einem wirklich guten Austausch mit Jim in den Kommentaren unten muss ich korrigiert werden. Die Spezifikation besagt, dass getAttribute den Attributwert und nicht die absolute URL zurückgeben soll. Der Ansatz von Microsoft ist falsch.
Derzeit verwende ich die Objekteigenschaftenmethode der alten Schule
linkobj.href
, um abgeleitete absolute URLs zurückzugeben. Es liefert die konsistentesten Ergebnisse in allen Browsern.
URLs von InteresseW3C REC DOM Level 2 Kernspezifikation für getAttributeGecko-Dokumentation für getAttributeMicrosoft-Dokumentation für getAttribute Wie üblich, gerade als ich diesen Beitrag beendete, fand ich diesen Fehlerbericht auf der QuickMode-Site, der dasselbe Thema behandelt.
getAttribute HREF ist immer absolute.html