_blank开新窗口不符合标准?

本文参考了以下文章:

我们要在新窗口中打开链接通常的做法是在链接后面加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>

就是这样。

最后补充一句,我网站采用的target="new"在过渡型DOCTYPE下是允许的,但也不符合strict标准。下次改版时我将采用strict模式,将所有target="new"改成rel="external"。

(0)

相关推荐

  • _blank开新窗口不符合标准?

    本文参考了以下文章: Kevin Yank的<New-Window links in a Standards-Compliant World> <Standards-based Replacement for target="_blank" in External links> 我们要在新窗口中打开链接通常的做法是在链接后面加target="_blank",我们采用过渡型的DOCTYPE(xh tml1-transitional. dtd)时

  • greybox——不开新窗口看新的网页

    demo:http://www.healdream.com/upload/html/jquery/greybox/test.htmldown:http://www.51files.com/?9UF4NA8RCRX5A0Z2F170使用方法 复制代码 代码如下: <script type="text/javascript" src="../jquery.js"></script>     <script type="text/j

  • C# DropDownList中点击打开新窗口的方法

    1.页面上添加 复制代码 代码如下: <asp:DropDownList ID="DropDownList1" runat="server">                            </asp:DropDownList> 2.在head之间 复制代码 代码如下: <script type="text/javascript">            function openwindow(url)

  • Vue中在新窗口打开页面及Vue-router的使用

    背景 在开发提分加项目的过程中,遇到了点击下拉菜单时在新窗口中打开页面,由于之前一直做的是单页面应用,没有碰到过类似的需求,于是上网搜了一下解决办法,也再次系统地温习了一下vue-router. 解决 使用路由对象的resolve方法解析路由,可以得到location.router.href等目标路由的信息.得到href就可以使用window.open开新窗口了. const {href} = this.$router.resolve({ name: "statistics-explain&qu

  • vue路由跳转打开新窗口(window.open())和关闭窗口(window.close())

    目录 vue路由跳转打开新窗口和关闭窗口 编程式导航 window.open( )方法 关闭窗口 window.close() vue路由跳转打开新窗口(被浏览器拦截) 第一种方法 第二种方法 第二种方法(改良版) 总结 vue路由跳转打开新窗口和关闭窗口 需求:从当前页面跳转到其他页面时,打开一个新窗口 比如:点击页面上的用户反馈,打开用户反馈的新页面,要使用编程式导航 编程式导航 使用路由对象的resolve的方法解析路由,可以得到location.router.href等目标路由的信息,只

  • 网页打开新窗口target=_blank不符合标准

    "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"?这个属性很方便啊.呵呵,不知

  • vue打开新窗口并实现传参的图文实例

    我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页. 通过面向百度编程,发现网上的根本达不到这个效果,而且还都是坑,明明实现不了,还若有其事的写出来,于是我在标题特意加上有图有真相,诚我不欺,实现不了功能,就不要出来糊弄人. 先把我做好的代码写出来,后面再介绍别人实现不了的坑,以及这方面相关要注意的. 打开新窗口并传参代码 //打开新窗口并传参,参数不能显

  • IE和火狐中模仿Click事件及提交到新窗口总结(asp.net)

    先看一下模拟click事件的代码: 复制代码 代码如下: <a href=http://www.jb51.net target="_blank" id="aa">ok</a> <script> var comment = document.getElementById('aa'); if (document.all) { comment.click(); } else { //火狐,如果<a>中没有定义onclick事

  • ueditor1.2.1修改超链接默认值,ueditor编辑器新窗口打开连接

    ueditor1.2.1修改超链接默认值 首先超链接的文件是在ueditor目录中的dialogs目录中的link目录的link.html 如图: 然后在链接地址或标题上加value属性和值,希望在新窗口打开,则设置checked属性,如下面红色代码所示. <tr> <td><labelfor="href">链接地址:</label></td> <td><input class="txt"

  • JQuery实现的在新窗口打开链接的方法小结

    第一种:下面的代码是针对jb51这个样式下的a都是在新窗口打开 复制代码 代码如下: <script type="text/javascript"> jQuery(document).ready(function($) { $('.jb51 a').attr({target: "_blank"}); }); </script> 第二种: 复制代码 代码如下: <script src="http://code.jquery.co

随机推荐