我从未见过 在任何地方实际使用过<base>HTML标记。使用它有陷阱吗,这意味着我应该避免使用它?
<base>
我从来没有注意到它在现代生产站点(或任何站点)上使用过的事实,使我对此感到不安,尽管它似乎具有简化我站点上链接的有用应用程序。
在使用基本标签几周后,我确实发现使用基本标签会引起一些重大麻烦,这使它比最初出现的效果要差得多。从本质上讲,变化href='#topic'和href=''基本标签下是_非常_有它们的默认行为不兼容,并可以从默认行为,这种变化很容易使第三方库的控制之外 非常不可靠 因为它们在逻辑上将取决于默认行为,因此它们以意想不到的方式运行。所做的更改通常很细微,在处理大型代码库时会导致不那么明显的问题。此后,我创建了一个答案,详细说明了我在下面遇到的问题。因此,在您承诺广泛部署之前,请先亲自测试链接结果<base>,这是我的新建议!
href='#topic'
href=''
基本标记似乎有一些非直觉的影响,我建议您在了解结果之前,先对结果进行测试并亲自进行测试<base>!由于我是 在 尝试使用base标签处理具有不同url的本地站点 后 发现它们的 , 并且仅在发现令人讨厌的影响之后,令我感到沮丧的是,我感到不得不为其他人创建这些潜在陷阱的摘要。
除非明确说明,否则没有链接,命名的锚点或空白的href指向原始子目录:基本标记使 所有 链接都不同,包括指向基本标记url的同一页锚点链接,例如:
<a href='#top-of-page' title='Some title'>A link to the top of the page via a named anchor</a> 变成 <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='#top-of-page' title='Some title'>A link to the top of the page via a named anchor</a>
<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> 变成 <a href='http://www.example.com/other-subdirectory/?update=1' title='Some title'>A link to the base tag's page instead</a>
<a href='?update=1' title='Some title'>A link to this page</a>
<a href='http://www.example.com/other-subdirectory/?update=1' title='Some title'>A link to the base tag's page instead</a>
通过一些工作,您可以通过明确指定这些链接链接到它们所在的页面来解决您可以控制的链接上的这些问题,但是当您向第三方库添加依赖于标准行为的第三方库时,它很容易造成大混乱。
要求有条件的意见IE6补丁:需要有条件的评论对IE6避免搞砸了DOM的层次结构,即<base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]-->如BalusC在他的回答中提到以上。
<base href="http://www.example.com/"><!--[if lte IE 6]></base><![endif]-->
BalusC
因此,总的来说,除非您对每个链接都拥有完全的编辑控制权,否则主要问题就变得棘手了,而且正如我最初担心的那样,这使麻烦变得比其价值更大。现在,我必须开始重写它的所有用法!:p
Izzy编辑: 对于你们所有人,我都对我的评论感到困惑:
我刚刚对自己进行了测试,结果如下:
#anchor
?query
<BASE>
other.html
dir/other.html
DOCUMENT_ROOT
/other-subdirectory
因此,对于相对链接,BASE可以在移动的页面上正常工作- 同时定位并?queries需要明确指定文件名(带有BASE斜杠,或者最后一个元素与其所使用的文件名不符)。
BASE
?queries
可以将其视为<BASE>替换 文件本身 (而 不是 文件 所在目录)的 完整URL, 这样您就可以正确处理。假设此示例中使用的文件是other-subdirectory/test.html(移至新位置后), 则正确的规范应为:
other-subdirectory/test.html
<base href="http://www.example.com/other-subdirectory/test.html“>
<base href="http://www.example.com/other-subdirectory/test.html
-等瞧, 一切都 按预期工作:#anchor,?query,other.html,very/other.html,/completely/other.html。
very/other.html
/completely/other.html