_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( ...
随机推荐
- Android 如何在ScrollView中嵌套ListView
前几天因为项目的需要,要在一个ListView中放入另一个ListView,也即在一个ListView的每个ListItem中放入另外一个ListView.但刚开始的时候,会发现放入的小ListVie ...
- 【HDOJ】1203 I NEED A OFFER!
DP问题. #include <stdio.h> #define MAXNUM 10002 int main() { int m, n; int cost[MAXNUM]; // the ...
- Webform——服务器控件与客户端控件
Webform,即BS,浏览器应用. 关于服务器和客户端,在Webform 中, 服务器就相当于后台(也就是编辑C#代码的地方), 客户端相当于前台(也就是Html页面). 用法: ①如果想在服务器 ...
- 利用switch case判断是今天的第多少天
static void Main(string[] args) { while (true) { int m1 ...
- 编译安装nginx并修改版本头信息—参考实例
今天做实验的时候,想起我那台yum安装的nginx+php-fpm+mysql服务器上的nginx版本有点低了,并且还要加两个第3方模块,就去nginx官网下载了最新稳定版nginx-1.0.6,好了 ...
- Android 实用代码七段(一)
前言 这里积累了一些不常见确又很实用的代码,每收集7条更新一次,希望能对大家有用. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: htt ...
- HDU 3416 Marriage Match IV dij+dinic
题意:给你n个点,m条边的图(有向图,记住一定是有向图),给定起点和终点,问你从起点到终点有几条不同的最短路 分析:不同的最短路,即一条边也不能相同,然后刚开始我的想法是找到一条删一条,然后光荣TLE ...
- Java&MySQL Type Mapping
MySQL Type Name Return value of GetColumnClassName Returned as Java Class BIT(1) (new in MySQL-5.0) ...
- Java JDK8 安装及环境变量配置
步骤: 1.下载JDK 2.安装 3.配置环境变量 注意: 1.在选择安装路径时,不要选择C盘或D盘下的[Program Files]目录.此目录名中有空格,会导致配置不成功. 参照链接: http: ...
- TCA9546A
The TCA9546A is a 4-channel, bidirectional translating switch for I 2 C buses that supports Standard ...