它可能不是很受欢迎,因为它并不为人所知。我不会害怕使用它,因为所有主流浏览器都支持它。
如果您的网站使用AJAX,您需要确保所有网页都正确设置,否则您最终可能无法解析链接。
只是不要使用 target HTML 4.01严格页面中的属性。
target
它使页面更容易离线观看;您可以将完全限定的URL放在基本标记中,然后您的远程资源将正确加载。
的 基本href示例 强>
说一个带链接的典型页面:
<a href=home>home</a> <a href=faq>faq</a> <a href=etc>etc</a>
.and链接到diff文件夹:
..<a href=../p2/home>Portal2home</a> <a href=../p2/faq>p2faq</a> <a href=../p2/etc>p2etc</a>..
同 基础href ,我们可以避免 重复 基础文件夹:
<base href=../p2/> <a href=home>Portal2-Home</a> <a href=faq>P2FAQ</a> <a href=contact>P2Contact</a>
这是一场胜利.. 的 然而 强> 页面太经常包含url来扩展基础和当前的Web支持 的 每页只有一个基本href 强> ,所以胜利很快就会失去作为基础的基础?hrefed重复,例如:
<a href=../p1/home>home</a> <a href=../p1/faq>faq</a> <a href=../p1/etc>etc</a> <!--.. <../p1/> basepath is repeated --> <base href=../p2> <a href=home>Portal2-Home</a> <a href=faq>P2FAQ</a> <a href=contact>P2Contact</a>
( 基准目标 可能有用。) 的 基础href是无用的 强> 如:
的 有关 强>
在决定是否使用之前 <base> 无论是否标记,您需要了解它是如何工作的,它可以用于什么以及它的含义是什么,并最终超过优点/缺点。
<base>
该 <base> tag主要简化在模板语言中创建相对链接,因为您不需要担心当前的上下文 一切 链接。
你可以这样做
<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> 值以斜杠结束,否则将相对于最后一个路径进行解释。
<base href>
至于浏览器兼容性,这只会导致IE中出现问题。该 <base> 标签在HTML中指定为 不 有一个结束标记 </base> ,所以只使用它是合法的 <base> 没有结束标记。但IE6认为不然和整个内容 后 该 <base> 标签在这种情况下被放置为 的 儿童 强> 的 <base> HTML DOM树中的元素。这可能会导致乍一看Javascript / jQuery / CSS中无法解释的问题,即在特定选择器中完全无法访问的元素,如 html>body ,直到你在HTML DOM检查器中发现应该有一个 base (和 head 介于两者之间。
</base>
html>body
base
head
常见的IE6修复使用IE条件注释来包含结束标记:
<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->
如果您不关心W3验证器,或者您已经使用HTML5,那么您可以自行关闭它,每个webbrowser都支持它:
<base href="http://example.com/en/" />
关闭 <base> 标签也立即修复 疯狂 在WinXP SP3上请求IE6 <script> 具有相对URI的资源 src 在无限循环中。
<script>
src
当你在中使用相对URI时,将会出现另一个潜在的IE问题 <base> 标签,如 <base href="//example.com/somefolder/"> 要么 <base href="/somefolder/"> 。这将在IE6 / 7/8中失败。然而,这不是浏览器的错;在中使用相对URI <base> 标签就是它自己的错误。该 HTML4规范 声明它应该是一个绝对的URI,因此从 http:// 要么 https:// 方案。这已被删除 HTML5规范 。因此,如果您仅使用HTML5并且仅针对HTML5兼容浏览器,那么您应该可以通过使用相对URI来完成 <base> 标签。
<base href="//example.com/somefolder/">
<base href="/somefolder/">
http://
https://
至于使用命名/哈希片段锚点 <a href="#anchor"> ,查询字符串锚点 <a href="?foo=bar"> 和路径片段锚点 <a href=";foo=bar"> ,随着 <base> 标记你基本上是在声明 的 所有 强> 相对于它的相对链接, 的 包含 强> 那种锚。没有任何相对链接相对于当前请求URI(如果没有相关链接) <base> 标签)。这可能首先让初学者感到困惑。要以正确的方式构造这些锚点,您基本上需要包含URI,
<a href="#anchor">
<a href="?foo=bar">
<a href=";foo=bar">
<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中。值得注意的是,像JSF这样的MVC框架有标签,减少了所有这些样板并消除了对它的需求 <base> 。另见a.o. 用于链接/导航到其他JSF页面的URL 。
${uri}
$_SERVER['REQUEST_URI']
${pageContext.request.requestURI}
#{request.requestURI}