Home > Internet > 能通过W3C的新窗口打开链接方法
2009April . 21st

能通过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属性,只不过用了偷龙转凤的方法而已。

推荐到豆瓣
  1. 2009April . 21st - 5:31 PM

    这个以前倒是没注意,等会去测测看

  2. 2009April . 24th - 1:03 AM

    其实这还不是最好的写法.
    anchor.target = “_blank”;只是利用JS期骗而已.

  3. 2009April . 24th - 12:25 PM

    @Await
    我实在是找不到更好的方法了,还待高手赐教。

  4. 2009April . 25th - 6:27 PM

    W3C有规定不能新窗口打开么?

  5. 2009April . 25th - 6:42 PM

    @wulinfo
    是target=”_blank”参数不符合w3c的标准。

  6. 2009April . 28th - 12:30 AM

    过于严格遵守W3C,特别是所谓的W3C验证将有可能违背可用性原则,当然,除非你十分的追求简单。W3C也应该与时俱进,毕竟这是个由人制定的,也应该服务于人,应该发展。对于用不用target=”_blank”不应该是由W3C来决定,是由人来决定——是由设计者与用户共同商议决定,不新开窗口也不代表什么前卫,在未来的电脑硬件配置里,多开窗口就如WINDOWS多任务处理那样方便,将不再是“吃资源”的事了。

  7. 2009April . 28th - 2:33 PM

    @GOVO
    这个观点很有参考价值。网站应该更注重易用性,毕竟网站做出来是让人看的,不是拿去给w3c验证的。

  8. 2009September . 11th - 1:33 AM

    用 windows.open 会更好.
    既然可以用 JavaScript 添加 target=”_blank”, 那 JS 必然是可用的, 可以使用 window.open 在新页面/标签中打开网页.

Subscriber selector

Close