base-tag - 推荐使用<base> html标记?

  显示原文与译文双语对照的内容

我刚刚发现了 <base> HTML标记 。 我从未见过它在任何地方都使用过。 它的用法是否有缺陷,这意味着我应该避免它?

于简化相关链接在我site,事实上我从来没有注意到在使用它的一个现代生产现场( 或者任何网站) applications.使我不愿意使用它,不过似乎也能有有用


编辑

使用基准标记了数周,的我那样最后找到一些主要 经验之谈与使用基准标记,确认和提示的优先级低于它最先出现的。 在默认behavior,从本质上讲,使更改的基本标签是下 href='#topic'href='' 非常与它们的默认行为,而这种改变又不兼容与默认行为以意想不到的方式可以方便地创建第三方库超出了你的控制非常不可靠,因为它们会逻辑地 depend. 在处理大型代码库时,这些变化往往是细微的,导致not-immediately-obvious问题。 我已经创建了一个回答我在下面遇到的问题的答案。 所以在你提交 <base>的广泛部署之前,先测试一下链接结果,这是我的新建议 !

时间:

在决定是否使用该 <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><base> 标记之后在HTML中不指定为 有一个结束标记,因此它要求还是准确地使用 <base> 不带结束标记。 但是据cnn报道认为另有和整个内容 <base>的标记之后正是在这种情况下作为放置子<base> 元素在HTML中的DOM树。 这可能会导致在乍一看中无法解释的问题 Javascript/jQuery/CSS, 换句话说,将被完全无法访问的元素融入到具体的选择器像 html>body,直到你发现在htmldom中检视面板里应该有一个 base ( 和 head ) 在两者之间。

常见的IE6修复方法是使用 IE 条件注释来包含结束标记:


<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->

如果你不关心W3的验证程序,或者当你已经在 html 5 上,那么你可以只self-close它,支持它的web browser都有新


<base href="http://example.com/en/"/>

结束那 <base> 标记还能及时修复那 insanity 据cnn报道对现成的SP3 src 中用一个相对URI来请求 <script> 资源进入死循环。

为一个人 <base> 标记,这样as,势将 Manifest IE 问题当你使用相对 URI <base href="//example.com/somefolder/"> 在这里一定会失败 IE6/7/8. 自己的wrong,或者 <base href="/somefolder/"> 。但是,这并不完全的浏览器故障;使用相对uri是 namely. <base> 标记中 HTML4规范说明它应该是绝对 URI,因此从 http:// 或者 https:// 方案开始。 这已经在 HTML5规范中除去。 因此,如果只使用HTML5和目标HTML5兼容浏览器,那么在 <base> 标签中使用相对URI就可以了。


至于使用命名锚点的所有 <base> 标记就基本上声明<a href="#anchor">,使用相对链接相对于它,包括命名锚点。 相对链接不再与当前请求URI相对应( 没有 <base> 标记就会发生) 。 这可能会让初学者感到困惑。 要构造命名的锚,你基本上需要


<a href="${uri}#anchor">jump</a>

${uri} 在PHP中的基本转换为 $_SERVER['REQUEST_URI']${pageContext.request.requestURI} 在JSP中,在JSF中使用 #{request.requestURI}

Drupal最初依赖于 <base> 标记,后来决定不使用由于HTTP爬虫&缓存而导致的问题。

我通常不喜欢投递链接。 但是这个真正值得共享,因为它可以有益于那些在 <base> 标签中寻找真实体验的细节:

http://drupal.org/node/13148

它可能不是很流行,因为它还不是很出名。 我不会害怕使用它,因为所有主流浏览器都支持它。

如果你的站点使用 AJAX,你将需要确保所有页面都设置正确,或者你可能会得到无法解决的链接。

在一个 HTML 4.01严格page,只是不要使用 target attribute.

...