Ripartizione degli effetti del tag base:
Il tag di base sembra avere alcuni effetti non intuitivi e raccomando di essere consapevole dei risultati e di testarli da soli prima di fare affidamento <base>
! Da quando li ho scoperti dopo aver provato a utilizzare il tag di base per gestire siti locali con URL diversi e ho scoperto gli effetti problematici solo dopo, con mio sgomento, mi sento in dovere di creare questo sommario di queste potenziali insidie per gli altri.
Userò un tag base di: <base href="http://www.example.com/other-subdirectory/">
come il mio esempio nei casi seguenti, e farò finta che la pagina su cui si trova il codice sia http://localsite.com/original-subdirectory
Maggiore:
Nessun collegamento o ancoraggio con nome o href vuoto rimanderà alla sottodirectory originale, a meno che ciò non sia esplicito: il tag di base rende ogni collegamento in modo diverso, includendo invece i collegamenti di ancoraggio della stessa pagina all'URL del tag di base, ad esempio:
<a href='#top-of-page' title='Some title'>A link to the top of the page via a named anchor</a>
diventa
<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>
diventa
<a href='http://www.example.com/other-subdirectory/?update=1' title='Some title'>A link to the base tag's page instead</a>
Con un po 'di lavoro, puoi risolvere questi problemi sui link su cui hai il controllo, specificando esplicitamente che questi link si collegano alla pagina in cui si trovano, ma quando aggiungi librerie di terze parti al mix che si basano sul comportamento standard, può facilmente causare un grande casino.
Minore:
Correzione di IE6 che richiede commenti condizionali: richiede commenti condizionali per ie6 per evitare di rovinare la gerarchia dom, ovvero <base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]-->
come BalusC
menzioni nella sua risposta sopra.
Quindi, nel complesso, il problema principale rende l'uso complicato a meno che tu non abbia il pieno controllo di modifica su ogni collegamento, e come temevo originariamente, questo lo rende più problemi di quanto valga la pena. Ora devo andare e riscrivere tutti i miei usi! : p
Collegamenti correlati di test per problemi durante l'utilizzo di "frammenti" / hash:
http://www.w3.org/People/mimasa/test/base/
http://www.w3.org/People/mimasa/test/base/results
Modifica di Izzy: Per tutti voi che avete la stessa confusione nei miei confronti riguardo ai commenti:
L'ho appena testato da solo, con i seguenti risultati:
- barra finale o no, non fa differenza per gli esempi forniti qui (
#anchor
e ?query
verrebbe semplicemente aggiunto a quello specificato <BASE>
).
- Tuttavia, fa la differenza per i collegamenti relativi: omettendo la barra finale,
other.html
e dir/other.html
inizierebbe DOCUMENT_ROOT
con l'esempio dato, /other-subdirectory
essendo (correttamente) trattato come file e quindi omesso.
Quindi, per i collegamenti relativi, BASE
funziona bene con la pagina spostata - mentre gli ancoraggi e ?queries
avrebbero bisogno di specificare esplicitamente il nome del file (con BASE
una barra finale o l'ultimo elemento non corrispondente al nome del file in cui viene utilizzato).
Pensa a come <BASE>
sostituire l' URL completo al file stesso (e non alla directory in cui risiede) e otterrai le cose giuste. Supponendo che il file utilizzato in questo esempio fosse other-subdirectory/test.html
(dopo che è stato spostato nella nuova posizione), la specifica corretta avrebbe dovuto essere:
<base href="http://www.example.com/other-subdirectory/test.html
">
- et voilà, tutto funziona come previsto: #anchor
, ?query
, other.html
, very/other.html
, /completely/other.html
.