Répartition des effets du tag de base:
La balise de base semble avoir des effets non intuitifs, et je recommande d'être conscient des résultats et de les tester par vous-même avant de vous en remettre <base>
! Depuis que je les ai découvert après avoir essayé d'utiliser la balise de base pour gérer des sites locaux avec des URL différentes et que je n'ai découvert les effets problématiques qu'après, à ma grande consternation, je me sens obligé de créer ce résumé de ces pièges potentiels pour d'autres.
Je vais utiliser une balise de base de: <base href="http://www.example.com/other-subdirectory/">
comme mon exemple dans les cas ci-dessous, et je ferai semblant que la page sur laquelle se trouve le code est http://localsite.com/original-subdirectory
Majeur:
Aucun lien ou ancre nommée ou hrefs vides ne pointera vers le sous-répertoire d'origine, à moins que cela ne soit explicite: la balise de base fait tout lier différemment, y compris les liens d'ancrage de même page à l'url de la balise de base à la place, par exemple:
<a href='#top-of-page' title='Some title'>A link to the top of the page via a named anchor</a>
devient
<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>
devient
<a href='http://www.example.com/other-subdirectory/?update=1' title='Some title'>A link to the base tag's page instead</a>
Avec un peu de travail, vous pouvez résoudre ces problèmes sur les liens sur lesquels vous avez le contrôle, en spécifiant explicitement que ces liens pointent vers la page sur laquelle ils se trouvent, mais lorsque vous ajoutez des bibliothèques tierces au mix qui reposent sur le comportement standard, cela peut facilement causer un gros gâchis.
Mineur:
Correction d'IE6 qui nécessite des commentaires conditionnels: nécessite des commentaires conditionnels pour ie6 afin d'éviter de visser la hiérarchie dom, c'est- <base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]-->
à- dire comme BalusC
mentionné dans sa réponse ci-dessus.
Donc, dans l'ensemble, le problème majeur rend l'utilisation difficile, sauf si vous avez un contrôle d'édition complet sur chaque lien, et comme je le craignais à l'origine, cela rend plus difficile que cela ne vaut. Maintenant, je dois partir et réécrire toutes mes utilisations! : p
Liens connexes de test des problèmes lors de l'utilisation de "fragments" / hachages:
http://www.w3.org/People/mimasa/test/base/
http://www.w3.org/People/mimasa/test/base/results
Edit by Izzy: Pour vous tous rencontrant la même confusion que moi concernant les commentaires:
Je viens de le tester moi-même, avec les résultats suivants:
- barre oblique de fin ou non, ne fait aucune différence avec les exemples donnés ici (
#anchor
et ?query
serait simplement ajouté à la spécification <BASE>
).
- Cependant, cela fait une différence pour les liens relatifs: omettant la barre oblique de fin,
other.html
et dir/other.html
commencerait DOCUMENT_ROOT
par l'exemple donné, /other-subdirectory
étant (correctement) traité comme fichier et donc omis.
Ainsi, pour les liens relatifs, BASE
fonctionne très bien avec la page déplacée - tandis que les ancres et ?queries
que le nom du fichier devrait être spécifié explicitement (avec BASE
une barre oblique de fin, ou le dernier élément ne correspondant pas au nom du fichier dans lequel il est utilisé).
Considérez-le comme <BASE>
remplaçant l' URL complète du fichier lui-même (et non le répertoire dans lequel il réside), et vous obtiendrez les choses correctement. En supposant que le fichier utilisé dans cet exemple était other-subdirectory/test.html
(après son déplacement vers le nouvel emplacement), la spécification correcte aurait dû être:
<base href="http://www.example.com/other-subdirectory/test.html
">
- et le tour est joué, tout fonctionne comme prévu: #anchor
, ?query
, other.html
, very/other.html
, /completely/other.html
.