_blank开新窗体不符合标准?
我们要在新窗体中打开链接通常的做法是在链接后面加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例如以下:
- function externallinks() {
- if (!document.getElementsByTagName) return;
- var anchors = document.getElementsByTagName("a");
- ; 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>
就是这样。精心开发5年的UI前端框架!
最后补充一句,我站点採用的target="new"在过渡型DOCTYPE下是同意的,但也不符合strict标准。下次 改版时我将採用strict模式,将全部target="new"改成rel="external"。
_blank开新窗体不符合标准?的更多相关文章
- 【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 ...
- JavaScript-打开新窗口(window.open)和 关闭窗口(window.close)
JavaScript-打开新窗口 open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选 ...
- Response.Redirect 打开新窗体的两种方法
普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...
- vueRouter点击打开新页签
一.vue 路由使用 vue是单页面SPA,一般我们使用vue-router 设定路由进行页面跳转的时候,都是直接覆盖当前页面.比如,在a页面中有如下超链接 <router-link to=&q ...
- ajax回调打开新窗体防止浏览器拦截有效方法
ajax回调打开新窗体防止浏览器拦截,就这么做! 问题剖析: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function click_fun(){ window ...
- C#-WinForm-打开其他窗体的三种方式-Show()、设置Owner()、ShowDialog()
打开其他窗体的三种方式 Show - 例如登入界面进入主页面,直接将主页面展示出来,两个窗体互不影响 public partial class Form1 : Form { public Form1( ...
- 安全 流程服务器开新机器 内外网 iptables 安全组 用户安全root用户的使用.
安全 流程服务器开新机器 内外网 iptables 安全组 用户安全root用户的使用.
- C# 在窗体的子线程中创建新窗体
在子线程中如果简单的调用新窗体的话,新出来的窗体会直接一闪而过.没有停留.效果很差 具体解决方法 如下: 在母窗体中建立委托 public delegate void setShowChartForm ...
- android安卓开发基础小笔记,添加按钮事件,打开新窗体,窗体传值,回传
给一个按钮添加onclick事件 //获取按钮对象 Button Aiyo = (Button)findViewById(R.id.button1); Aiyo.setOnClickListener( ...
随机推荐
- RAM云存储已经出现了,就是特别贵
据说bat有这种全内存的服务器集群, RAM的问题是,容量上去了就会很费电,而且不方便做持久化,并且成本也不低,一般只能作为缓存.内存数据库,给bat.12306这种高富帅用 也有提供内存云存储的服务 ...
- gdb 调试c/c++的一些小技巧
ptype obj/class/struct 查看obj/class/struct的成员,但是会把基类指针指向的派生类识别为基类 set print object on 这个选项可以看到派生对象的 ...
- webstore+nodejs
新建一个普通的project. 编写如下代码: var http=require('http'); http.createServer(function(req,res){ res.writeHead ...
- ie调试器
最大化影响调试的,点右上角的固定按妞
- bzoj1875
我们知道,邻接矩阵自乘t次就是经过t条边的路径数但这道题显然不能这样,因为不能走回头路于是我们可以构造边的邻接矩阵矩乘即可 ; type way=record po,fr:longint; end; ...
- bzoj1027
感觉网上很多题解写的似乎不清楚,这里说一下我的思路显然对于每个用户的材料(设其比例为Ai,Bi,Ci),我们要么最多用3种原料(设其比例为ai,bi,ci)混合成需要材料,要么一定混合不成,具体原因往 ...
- Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞
漏洞名称: Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞 CNNVD编号: CNNVD-201311-054 发布时间: 2013-11-06 更新时间: 2013- ...
- Poj3680 Intervals
这题比较经典,题意大致上就是给你n个点和m个区间,每个区间有一个正权值,让你选出一些区间,使得每个点都不会被覆盖超过k次,且选出的区间权值和最大. -------------------------- ...
- SharePoint Services 数据库表
转:http://dugan.bokee.com/630446.html 以下是Microsoft Windows SharePoint Services架构中数据库列表. Configuration ...
- CSS学习笔记——定位position属性的学习
今天学习之前剩下的一个问题:CSS的position属性.首先归纳出和position相关的问题: position作为一个属性,它一共有哪几个属性值? position常用的属性值有哪几个?分别有什 ...