能通过W3C的新窗口打开链接方法
我们要在新窗口中打开链接通常的做法是在链接后面加target=”_blank”,我们采用过渡型的DOCTYPE(xh tml1-transitional. dtd)时没有问题,但是当我们使用严格的DOCTYPE(xhtml1-strict.dtd)时,这个方法将通不过W3C的校验,会出现如下错误提示:
“there is no attribute target for this element(in this HTML version)”
原来在HTML4.01/XHTML1.0/XHTML1.1严格DOCTYPE下,target=”_blank”、target=”_self”等等语法都是无效的,我们只能通过JavaScript来变通实现。
有朋友问为什么不允许使用target=”_blank”?这个属性很方便啊。呵呵,不知道W3C的专家们是怎么想的,据我所知,主要是“易用性、友好性”的问题,因为老外觉得不经过用户同意,没有明确提示就打开一个新窗口是不礼貌的。先不管这个取消是否合理,我们来看看解决办法。
rel属性
HTML4.0增加了一个新属性:rel,这个属性用来说明链接和包含此链接页面的关系,以及链接打开的目标。rel有许多的属性值,比如 next、previous,、chapter、section等等。我们要使用的就是rel=”externa l”属性。原来这样写的代码:
<a href="document.html" target="_blank"> 打开一个新窗口</a>
现在要写成这样:
<a href="document.html" rel="external">打开一个新窗口</a>
这是符合strict标准的方法。当然还必须配合一个javascript才有效。
javascript
完整的代码JS如下:
function externallinks() { if (!document.getElementsByTagName) return; var anchors = document.getElementsByTagName("a"); for (var i=0; i<anchors .length; i++) { var anchor = anchors[i]; if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") anchor.target = "_blank"; } } window.onload = externallinks;
你可以把它保存成一个.js文件(比如external.js),然后通过外部联接方法调用:
<script type="text/javascript" src="external.js"></script>
其实这个方法依然用了blank属性,只不过用了偷龙转凤的方法而已。






这个以前倒是没注意,等会去测测看
其实这还不是最好的写法.
anchor.target = “_blank”;只是利用JS期骗而已.
@Await
我实在是找不到更好的方法了,还待高手赐教。
W3C有规定不能新窗口打开么?
@wulinfo
是target=”_blank”参数不符合w3c的标准。
过于严格遵守W3C,特别是所谓的W3C验证将有可能违背可用性原则,当然,除非你十分的追求简单。W3C也应该与时俱进,毕竟这是个由人制定的,也应该服务于人,应该发展。对于用不用target=”_blank”不应该是由W3C来决定,是由人来决定——是由设计者与用户共同商议决定,不新开窗口也不代表什么前卫,在未来的电脑硬件配置里,多开窗口就如WINDOWS多任务处理那样方便,将不再是“吃资源”的事了。
@GOVO
这个观点很有参考价值。网站应该更注重易用性,毕竟网站做出来是让人看的,不是拿去给w3c验证的。
用 windows.open 会更好.
既然可以用 JavaScript 添加 target=”_blank”, 那 JS 必然是可用的, 可以使用 window.open 在新页面/标签中打开网页.