Перш ніж вирішити, використовувати <base>тег чи ні, потрібно зрозуміти, як він працює, для чого він може використовуватися та які наслідки, і, нарешті, переважувати переваги / недоліки.
<base>Тег головним чином полегшує створення відносних посилань в шаблонирования мов , як вам не потрібно турбуватися про поточний контексті в кожній посиланням.
Можна зробити, наприклад
<base href="${host}/${context}/${language}/">
...
<link rel="stylesheet" href="css/style.css" />
<script src="js/script.js"></script>
...
<a href="home">home</a>
<a href="faq">faq</a>
<a href="contact">contact</a>
...
<img src="img/logo.png" />
замість
<link rel="stylesheet" href="/${context}/${language}/css/style.css" />
<script src="/${context}/${language}/js/script.js"></script>
...
<a href="/${context}/${language}/home">home</a>
<a href="/${context}/${language}/faq">faq</a>
<a href="/${context}/${language}/contact">contact</a>
...
<img src="/${context}/${language}/img/logo.png" />
Зауважте, що <base href>значення закінчується косою рисою, інакше воно буде інтерпретуватися відносно останнього шляху.
Що стосується сумісності браузера, це спричиняє лише проблеми в IE. <base>Тег в HTML зазначено , як НЕ мають кінцевий тег </base>, так що це законно , щоб просто використовувати <base>без закриває тега. Однак IE6 думає інакше , і весь вміст після в <base>тезі в такому випадку поміщеного в якості дитини з <base>елемента в дереві HTML DOM. Це може спричинити з першого погляду незрозумілі проблеми у Javascript / jQuery / CSS, тобто елементи, які є абсолютно недосяжними у конкретних селекторах, як html>body, поки ви не виявите у інспектора HTML DOM, що між ними має бути base(і head).
Загальне виправлення IE6 використовує умовний коментар IE для включення кінцевого тегу:
<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->
Якщо ви не переймаєтесь валідатором W3 або коли ви вже користуєтеся HTML5, то можете просто закрити його, кожен веб-браузер підтримує його все одно:
<base href="http://example.com/en/" />
Закриття <base>тегу також миттєво фіксує божевільність IE6 на WinXP SP3 для запиту <script>ресурсів з відносним URI в srcнескінченному циклі.
Інша потенційна проблема IE виявиться, коли ви використовуєте відносний URI в <base>тезі, наприклад, <base href="https://stackoverflow.com//example.com/somefolder/">або <base href="https://stackoverflow.com/somefolder/">. Це не вдасться в IE6 / 7/8. Однак, це не зовсім помилка браузера; використання відносних URI в <base>тегу саме по собі неправильно. Специфікація HTML4 зазначала, що він повинен бути абсолютним URI, таким чином, починаючи зі схеми http://або https://. Це було скинуто в специфікації HTML5 . Тож якщо ви використовуєте лише HTML5 та націлені веб-переглядачі, сумісні з HTML5, вам слід буде добре, використовуючи відносний URI у <base>тезі.
Що стосується використання названих / хеш-фрагментів якорів на зразок <a href="#anchor">, анкерів рядка запитів, таких як <a href="?foo=bar">і фрагментів доріжки, таких як <a href=";foo=bar">, з <base>тегом ви, в основному, декларуєте всі відносні посилання відносно нього, включаючи такі види якорів. Жодне з відносних посилань більше не відповідає поточному URI запиту (як це станеться без <base>тега). В першу чергу це може заплутати для початківців. Щоб правильно побудувати ці анкери, вам потрібно включити URI,
<a href="${uri}#anchor">hash fragment</a>
<a href="${uri}?foo=bar">query string</a>
<a href="${uri};foo=bar">path fragment</a>
де в ${uri}основному перекладається на $_SERVER['REQUEST_URI']PHP, ${pageContext.request.requestURI}JSP та #{request.requestURI}JSF. Помічено, що рамки MVC, такі як JSF, мають мітки, що зменшують всю цю котловую плиту і усувають необхідність <base>. Дивіться також ао Яку URL-адресу використовувати для посилання / навігації на інші сторінки JSF .