打印

HJ2001: 各浏览器对 BASE 元素前后的超链接的默认 target 处理存在差异

作者:段立新

标准参考

在 HTML 中,链接、外部图像、样式表等都是通过指定一个 URI 从外部引入。相对 URI 根据基础 URI 解析,基础 URI 来源广泛,BASE 元素允许作者明确指定文档的基础 URI 。

BASE 元素必须出现在 HTML 文档的 HEAD 部分,在任何元素引入外部资源之前定义。 BASE 元素定义的路径信息只影响在文档中的元素出现的 URI 。

关于 BASE 元素的更多信息,请参考 HTML4.01 规范 12.4 Path information: the BASE element 中的内容。

问题描述

BASE 元素出现在 BODY 中,且定义了 target 属性,各浏览器表现不一致。

造成的影响

导致页面中的链接的打开方式不同,造成差异。

受影响的浏览器

所有浏览器  

问题分析

下面在 BODY 中定义 BASE 标签,且定义 target 属性值是 _blank:

<!DOCTYPE html>
<html>
<body>
<a href="http://www.w3.org">before BASE</a>
<base target="_blank" /><br />
<a href="http://www.w3.org">after BASE</a>
</body>
</html>

在各浏览器中效果如下:

  IE6 Opera Firefox IE7 IE8 Chrome Safari
点击 before BASE 当前页面打开 当前页面打开 在新窗口打开
点击 after BASE 在新窗口打开 当前页面打开 在新窗口打开

可见,

  • IE6 Opera Firefox 中,在 BASE 标签定义前链接在当前页面打开,在定义后在新窗口中打开
  • IE7 IE8 中,无论在 BASE 标签定义前还是定义后,都在当前页面打开。
  • Chrome Safari 中,无论在 BASE 标签定义前还是定义后,都在新窗口中打开。

解决方案

不要在 HEAD 元素之外定义 BASE 元素,保证各浏览器兼容。

参见

知识库

相关问题

测试环境

操作系统版本: Windows 7 Ultimate build 7600
浏览器版本: IE6
IE7
IE8
Firefox 3.6.10
Chrome 7.0.544.0 dev
Safari 5.0.2
Opera 10.62
测试页面: base.html
本文更新时间: 2010-10-08

关键字

BASE target