我们要在新窗体中打开链接通常的做法是在链接后面加target="_blank",我们採用过渡型的DOCTYPE(xh tml1-transitional. dtd)时没有问题,可是当我们使用严格的DOCTYPE(xhtml1-strict.dtd)时,这种方法 将通只是W3C的校验,会出现例如以下错误提示:

"there is no attribute targetfor
this element(in this HTML version)"

原来在HTML4.01/XHTML1.0/XHTML1.1严格DOCTYPE下,target="_blank"、target="_self"等等语法都是 无效的,我们仅仅能通过JavaScript来变通实现。精心开发5年的UI前端框架!

有朋友问为什么不允许使用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例如以下:

  1. function externallinks() {
  2. if (!document.getElementsByTagName) return;
  3. var anchors = document.getElementsByTagName("a");
  4. ; i<anchors.length; i++) {
  5. var anchor = anchors[i];
  6. if (anchor.getAttribute("href") &&
  7. anchor.getAttribute("rel") == "external")
  8. anchor.target = "_blank";
  9. }
  10. }
  11. window.onload = externallinks;

你能够把它保存成一个.js文件(比方external.js),然后通过外部联接方法调用:

<script
type="text/javascript" src="external.js"></script>

就是这样。精心开发5年的UI前端框架!

最后补充一句,我站点採用的target="new"在过渡型DOCTYPE下是同意的,但也不符合strict标准。下次 改版时我将採用strict模式,将全部target="new"改成rel="external"。

_blank开新窗体不符合标准?的更多相关文章

  1. 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘

    [C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ...

  2. JavaScript-打开新窗口(window.open)和 关闭窗口(window.close)

    JavaScript-打开新窗口 open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选 ...

  3. Response.Redirect 打开新窗体的两种方法

    普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...

  4. vueRouter点击打开新页签

    一.vue 路由使用 vue是单页面SPA,一般我们使用vue-router 设定路由进行页面跳转的时候,都是直接覆盖当前页面.比如,在a页面中有如下超链接 <router-link to=&q ...

  5. ajax回调打开新窗体防止浏览器拦截有效方法

    ajax回调打开新窗体防止浏览器拦截,就这么做! 问题剖析:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function click_fun(){    window ...

  6. C#-WinForm-打开其他窗体的三种方式-Show()、设置Owner()、ShowDialog()

    打开其他窗体的三种方式 Show - 例如登入界面进入主页面,直接将主页面展示出来,两个窗体互不影响 public partial class Form1 : Form { public Form1( ...

  7. 安全 流程服务器开新机器 内外网 iptables 安全组 用户安全root用户的使用.

    安全    流程服务器开新机器      内外网      iptables   安全组       用户安全root用户的使用.

  8. C# 在窗体的子线程中创建新窗体

    在子线程中如果简单的调用新窗体的话,新出来的窗体会直接一闪而过.没有停留.效果很差 具体解决方法 如下: 在母窗体中建立委托 public delegate void setShowChartForm ...

  9. android安卓开发基础小笔记,添加按钮事件,打开新窗体,窗体传值,回传

    给一个按钮添加onclick事件 //获取按钮对象 Button Aiyo = (Button)findViewById(R.id.button1); Aiyo.setOnClickListener( ...

随机推荐

  1. ANDROID_MARS学习笔记_S01原始版_008_Handler(异步消息处理机制)

    一.流程 1.点击按钮,则代码会使handler把updateThread压到队列里去,从而执行updateThread的run() 2.run()里会通过msg.arg1 = i 和bundle来写 ...

  2. Android 自定义title样式

    requestWindowFeature(featrueId),它的功能是启用窗体的扩展特性.参数是Window类中定义的常量.一.枚举常量1.DEFAULT_FEATURES:系统默认状态,一般不需 ...

  3. 使用git批量删除分支

    要删除本地,首先要考虑以下三点 列出所有本地分支 搜索目标分支如:所有含有‘dev’的分支 将搜索出的结果传给删除函数 所以我们可以得到: git br |grep 'dev' |xargs git ...

  4. Android开发UI之ViewPager及PagerAdapter

    ViewPager,官网链接--http://developer.android.com/reference/android/support/v4/view/ViewPager.html ViewPa ...

  5. URAL1244. Gentlemen(背包)

    链接 以前做的题 VJ太水了 数组里面的数可能会小于0 当时没判断 #include <iostream> #include<cstdio> #include<cstri ...

  6. Ajax的同步和异步

    在实际编程过程中,涉及到很多同步和异步的问题,例如: $("#btnTJ").bind("click", function () { //第一条语句 $.pos ...

  7. c# post文字图片至服务器

    最近由于项目需要实现c#提交文字及数据至服务器,因此研究了一下c# php数据传送: 下面用一个示例来演示,c# post文字+图片 ,php端接收: post提交数据核心代码(post数据提交) ? ...

  8. 转自 Because of you 的总结

    上下界网络流的问题严格的分,可以分为四类吧. 1:无源汇可行流  sgu 194 2:有源汇可行流  poj 2396  这题比较好,我建图建了将近200行 3:有源汇最大流  zoj 3496  这 ...

  9. [light oj 1328] A Gift from the Setter

    1328 - A Gift from the Setter   Problem setting is somewhat of a cruel task of throwing something at ...

  10. 关于HTTP返回码301、302区别与SEO

    301(永久移动)请求的网页已永久移动到新位置.服务器返回此响应时,会自动将请求者转到新位置.您应使用此代码告诉搜索引擎Spider某个网页或网站已永久移动到新位置.建议在URL规范化的时候采用301 ...