Aufschlüsselung der Auswirkungen des Basis-Tags:
Das Basis-Tag scheint einige nicht intuitive Effekte zu haben, und ich empfehle, sich der Ergebnisse bewusst zu sein und sie selbst zu testen, bevor Sie sich darauf verlassen <base>
! Da ich sie entdeckt habe, nachdem ich versucht habe, das Basis-Tag für den Umgang mit lokalen Websites mit unterschiedlichen URLs zu verwenden, und erst zu meiner Bestürzung die problematischen Auswirkungen herausgefunden habe, fühle ich mich gezwungen, diese Zusammenfassung dieser potenziellen Fallstricke für andere zu erstellen.
Ich verwende <base href="http://www.example.com/other-subdirectory/">
in den folgenden Fällen ein Basistag von: als mein Beispiel und tue so, als wäre die Seite, auf der sich der Code befindet, http://localsite.com/original-subdirectory
Haupt:
Keine Links oder benannte Anker oder leer hrefs auf die ursprüngliche Unterverzeichnis verweisen, es sei denn , dass deutlich gemacht wird: Die Basis - Tag macht alles Link anders, einschließlich gleichgeschlechtlicher Seite Sprungmarken zu den URL des Basis - Tag statt, zum Beispiel:
<a href='#top-of-page' title='Some title'>A link to the top of the page via a named anchor</a>
wird
<a href='http://www.example.com/other-subdirectory/#top-of-page' title='Some title'>A link to an #named-anchor on the completely different base page</a>
<a href='?update=1' title='Some title'>A link to this page</a>
wird
<a href='http://www.example.com/other-subdirectory/?update=1' title='Some title'>A link to the base tag's page instead</a>
Mit etwas Arbeit können Sie diese Probleme bei Links beheben, über die Sie die Kontrolle haben, indem Sie explizit angeben, dass diese Links auf die Seite verweisen, auf der sie sich befinden. Wenn Sie jedoch dem Mix Bibliotheken von Drittanbietern hinzufügen, die auf dem Standardverhalten beruhen, es kann leicht ein großes Durcheinander verursachen.
Geringer:
IE6-Fix, der bedingte Kommentare erfordert: Erfordert bedingte Kommentare für ie6, um zu vermeiden, dass die Dom-Hierarchie durcheinander gebracht wird, dh <base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]-->
wie BalusC
in seiner obigen Antwort erwähnt.
Insgesamt macht das Hauptproblem die Verwendung schwierig, es sei denn, Sie haben die volle Bearbeitungskontrolle über jeden Link, und wie ich ursprünglich befürchtet hatte, macht dies mehr Ärger als es wert ist. Jetzt muss ich los und alle meine Verwendungen davon neu schreiben! : p
Verwandte Links zum Testen auf Probleme bei der Verwendung von "Fragmenten" / Hashes:
http://www.w3.org/People/mimasa/test/base/
http://www.w3.org/People/mimasa/test/base/results
Edit by Izzy: Für alle, die in Bezug auf die Kommentare in die gleiche Verwirrung geraten wie ich:
Ich habe es gerade selbst getestet, mit den folgenden Ergebnissen:
- Ein abschließender Schrägstrich oder nicht, macht keinen Unterschied zu den hier angegebenen Beispielen (
#anchor
und ?query
würde einfach an den angegebenen angehängt <BASE>
).
- Es macht jedoch einen Unterschied für relative Links: den Schrägstrich weggelassen,
other.html
und dir/other.html
an dem beginnen würde DOCUMENT_ROOT
mit dem gegebenen Beispiel /other-subdirectory
(richtig) so behandelt , als Datei und somit entfällt.
Funktioniert also für relative Links BASE
einwandfrei mit der verschobenen Seite - während Anker vorhanden sind und ?queries
der Dateiname explizit angegeben werden muss (mit BASE
einem abschließenden Schrägstrich oder dem letzten Element, das nicht dem Namen der Datei entspricht, in der es verwendet wird).
Stellen Sie sich vor, Sie <BASE>
ersetzen die vollständige URL zur Datei selbst (und nicht das Verzeichnis, in dem sie sich befindet), und Sie werden alles richtig machen. Angenommen, die in diesem Beispiel verwendete Datei war other-subdirectory/test.html
(nachdem sie an den neuen Speicherort verschoben wurde), sollte die korrekte Spezifikation lauten:
<base href="http://www.example.com/other-subdirectory/test.html
">
- et voila, alles funktioniert wie erwartet: #anchor
, ?query
, other.html
, very/other.html
, /completely/other.html
.