Ventilation des effets de l'étiquette 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 soi-même avant de se fier à la balise <base>
! Depuis que je les ai découverts après J'ai essayé d'utiliser la balise base pour gérer des sites locaux avec des urls différentes et je n'ai découvert les effets problématiques qu'après, à mon grand désarroi, et je me sens obligé de créer ce résumé de ces pièges potentiels pour les 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 nous prétendrons que la page sur laquelle se trouve le code est http://localsite.com/original-subdirectory
Major :
Aucun lien, aucune ancre nommée ou aucun hrefs vide ne pointera vers le sous-répertoire d'origine, sauf si cela est explicite : La balise base rend tout différemment, en incluant des liens d'ancrage de la même page vers l'url de la balise de base à la place, par ex :
-
<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 que vous contrôlez, en spécifiant explicitement que ces liens renvoient à la page sur laquelle ils se trouvent, mais lorsque vous ajoutez au mélange des bibliothèques tierces qui s'appuient sur le comportement standard, cela peut facilement causer un grand désordre.
Mineur :
Correction d'IE6 qui nécessite des commentaires conditionnels : Nécessite des commentaires conditionnels pour ie6 afin d'éviter de foutre en l'air la hiérarchie des domaines, à savoir <base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]-->
como BalusC
mentionne dans sa réponse ci-dessus.
Donc, dans l'ensemble, le problème majeur rend l'utilisation délicate à moins que vous n'ayez un contrôle d'édition complet sur chaque lien, et comme je le craignais à l'origine, cela rend l'utilisation plus difficile qu'elle n'en vaut la peine. Maintenant, je dois aller réécrire toutes les utilisations que j'en ai faites ! :p
Liens connexes pour tester les problèmes liés à l'utilisation de "fragments"/hashs :
http://www.w3.org/People/mimasa/test/base/
http://www.w3.org/People/mimasa/test/base/results
Modifié par Izzy : Pour tous ceux qui sont dans la même confusion que moi concernant les commentaires :
Je viens de le tester moi-même, avec les résultats suivants :
- ou non, ne fait aucune différence pour les exemples donnés ici (
#anchor
y ?query
sera simplement ajouté à l'adresse spécifiée <BASE>
).
- Il y a toutefois une différence pour les liens relatifs : l'omission de la barre oblique de fin de ligne,
other.html
y dir/other.html
commencerait au DOCUMENT_ROOT
avec l'exemple donné, /other-subdirectory
étant (correctement) traité comme un fichier et donc omis.
Ainsi pour les liens relatifs, BASE
fonctionne sans problème avec la page déplacée, alors que les ancres et les ?queries
nécessiterait que le nom du fichier soit spécifié explicitement (avec l'option BASE
ayant une barre oblique de fin, ou le dernier élément ne correspondant pas au nom du fichier dans lequel il est utilisé).
Pensez-y comme <BASE>
en remplaçant le URL complète du fichier lui-même (et no le répertoire dans lequel il réside), et vous obtiendrez des résultats corrects. En supposant que le fichier utilisé dans cet exemple était other-subdirectory/test.html
(après son déménagement vers le nouvel emplacement), la spécification correcte aurait dû être :
<base href="http://www.example.com/other-subdirectory/test.html
">
- et voilà, tout fonctionne comme prévu : #anchor
, ?query
, other.html
, very/other.html
, /completely/other.html
.
15 votes
Il est souvent utilisé dans les versions en cache des résultats des moteurs de recherche pour que les liens continuent de fonctionner.
14 votes
Remarque : la balise base interagit également avec les ancres simples. Ainsi, si vous utilisez base, ce qui n'était auparavant qu'une ancre vers un emplacement sur la page
<a href='#anchor1'>Anchor1</a>
utilisera également la balise base, en contournant le comportement par défaut qui consiste à se référer à la page actuelle comme base. Il s'agit donc d'un point à surveiller (bien que ce problème puisse être résolu en utilisant une autre balise base dans les pages qui utilisent beaucoup d'ancres).1 votes
Si vous n'êtes pas satisfait de la réponse acceptée, pourquoi ne pas la refuser et la réaffecter ?
1 votes
Je ne savais pas que c'était une option, mais oui, je ne veux pas faire du rep-whore (si cela me donne des points), mais je pense que dans l'analyse finale, les inconvénients l'emportent sur les avantages, et je veux le souligner.
0 votes
Un autre problème mineur de la balise de base est que Facebook ne la prend pas en charge : developers.facebook.com/bugs/459837624068499
2 votes
Vous ne regardez généralement pas le code source de tous les sites importants que vous visitez. Je crois que plus de gens utilisent
<base>
que vous ne le pensez.0 votes
+1 pour "...ce changement du comportement par défaut pourrait facilement rendre les bibliothèques de tiers hors de votre contrôle très peu fiables de manière inattendue...". La balise de base peut finir par être un énorme Casse-tête et perte de temps s'il s'agit d'une bibliothèque tierce !
2 votes
Je n'avais jamais entendu parler de la balise "base" avant de participer à un test de pénétration, où les liens relatifs vers CSS et JavaScript sont déconseillés parce qu'un pirate peut injecter une balise "base" pour rediriger les données vers son site Web maléfique. Même l'utilisation de votre propre balise "base" par commodité peut être compromise par un pirate. Conclusion : n'utilisez pas la balise "base" et utilisez les chemins d'accès complets pour tous les liens.