解读IE和firefox下JScript和HREF的执行顺序
很久都没有写关于代码方面的文章了。主要原因还是因为最近的工作都集中在需求分析方面,没有了现实中的感触,就没有了写作的动机。讨论一个关于JScript执行顺序的问题。示例代码如下:
a.htm
<A onmouseup="func('onmouseup')" href="b.htm">Click Me!</A> <A onclick="func2('onclick')" href="d.htm">Click Me!</A> <SPAN id=msg></SPAN>
<SCRIPT>
function func(str)
{
msg(str);
window.location.href="c.htm";
}
function msg(str)
{
document.getElementById("msg").innerText=str; //A
//alert(str); //B
}
function func2(str)
{
msg(str);
window.location.href="e.htm";
}
</SCRIPT>
在msg(str)有个注释掉的行,试验的时候分别执行A和B。
A | B | |||
onmouseup | onclick | onmouseup | onclick | |
IE | b.htm | d.htm | c.htm | d.htm |
FireFox | c.htm->b.htm | e.htm->d.htm | c.htm->b.htm | e.htm->d.htm |
上表主要列出了两个浏览器中的执行顺序,红色代表页面脚本跳转的页面,蓝色是Anchor标签的href属性。从上面可以看出,对于FireFox,始终先执行页面脚本,然后浏览器再跳转。而IE里面执行的过程却有差别:
1、使用后退按钮直接回到a.htm,即页面只执行了一个跳转;
2、在使用alert中断的情况下,onmouseup执行了页面脚本中的跳转。
从上可以看出,
1、对于FireFox而言,页面脚本执行顺序始终优先于浏览器内嵌脚本执行顺序,这个已经很明显了。
2、IE中,HREF的执行顺序为onmouseup->href->onclick。真的吗?
为了更加明确2中的执行顺序,我们继续分析onclick和href的执行顺序关系。在上述例子中,onclick是采用调入的方式执行的。如果a. 我们使用以下的测试代码:
<a href="d.htm" onclick="return false;">Click Me!</a>
发现HREF不能被执行。
b. 如果我们使用以下测试代码:
<a href="d.htm" onclick="window.location.href='e.htm';return false;">Click Me!</a>
发现依旧执行HREF的d.htm,而不是onclick中的e.htm。
c. 如果我们使用以下测试代码:
<a href="d.htm" onclick="msg('onclick');return false;">Click Me!</a>( function msg()的代码如上)
发现执行了function msg(),而HREF不被触发。
晕了。IE的确是个诡异的东西。谁能帮忙解释一下b例中的现象?
相关推荐
-
JScript中调用ActiveX获取访客网卡MAC地址实现代码
JScript调用activeXObject获取访客的网卡MAC地址,注意只能IE下运行(IE8+没测试),会有安全提示,提示如下: 复制代码 代码如下: 在此页上的ActiveX控件和本页上的其他部分的交互可能不安全.你想允许这种交互吗? 注意选择"是",要不报错无法获取: 源代码如下: <html> <head> <title>JScript+ActiveX获取访客MAC网卡地址</title> </head> <b
-
在JScript中使用缓存技术的实际代码
在使用VBScript时,我们可以用Application缓存数组来实现缓存,例: 程序代码: 复制代码 代码如下: Dim rs,arr rs.Open conn,sql,1,1 arr=rs.GetRows() Application.Lock() Application("cache")=arr Applicatoin.UnLock() 在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,我
-
使用 JScript 创建 .exe 或 .dll 文件的方法
什么是 JScript? JScript 是由微软开发的活动脚本语言,基于 ECMAScript 规范实现.Internet Explorer 中的 JavaScript,实际上是指 JScript.JScript 已被 Windows Script Host(WSH)支持(WSH 中的 JavaScript shell scripting:C:\> cscript jslint.js).JScript 最新的版本(JScript.NET)基于 ECMAScript 4.0 ,并且可以在 .Ne
-
JScript中使用ADODB.Stream判断文件编码的代码
一开始使用ASCII编码来读取文本数据,模拟读取二进制数据,但是发现如果字符编码大于127时,只会得到小于128的值,相当于和128取余了,因此ASCII编码是不行的. 继续寻找,在CodeProejct.com找到一篇文章<Reading And Writing Binary Files Using JScript>,里面刚好有我需要的内容. 其实说来也简单,就是把编码换一下,使用437,这个是IBM扩展过的ASCII编码,把ASCII编码的最高位也利用起来,将字符集中的字符从128个扩展到
-
jscript读写二进制文件的方法
本文实例讲述了jscript读写二进制文件的方法.分享给大家供大家参考.具体实现方法如下: var bin = new Array(256); for(var i=0;i<256;i++){ bin[i]=String.fromCharCode(i); } function TestWrite(){ var Stream = new ActiveXObject("ADODB.Stream"); var adTypeBinary=1,adTypeText=2; Stream.Typ
-
解决 JScript 中使用日期类型数据时出现类型错误的问题
例如以下代码: 程序代码: 复制代码 代码如下: <%@LANGUAGE="JScript" CODEPAGE="65001"%> <script language="JScript" runat="server"> Response.Cookies("xujiwei")("name") = "xujiwei"; Response.Coo
-
使用jscript实现二进制读写脚本代码
因此,这里是一个很好的方式访问的二进制文件从JScript的.如果您要访问的这个对象从VBScript中,然后把它放在一个SWF文件.此对象已经被用于在愤怒将文件上载到Web服务,并已被证明是好的和快速的文件,在0-10 MB的地区./** This is a fairly well optimized object which alows 访问的二进制文件从JScript的在Windows *作业系统. *该文件的末尾是小的一套测试,以显示它如何 *用.您将需要adodb
-
JScript 脚本实现文件下载 一般用于下载木马
jscript版本 复制代码 代码如下: var objArgs=WScript.Arguments; var sGet=new ActiveXObject("ADODB.Stream"); var xGet=null; try{ xGet=new XMLHttpRequest(); }catch(e){ try{ xGet=new ActiveXObject("Msxml2.XMLHTTP"); }catch(ex){ try{ xGet=new ActiveXO
-
解读IE和firefox下JScript和HREF的执行顺序
很久都没有写关于代码方面的文章了.主要原因还是因为最近的工作都集中在需求分析方面,没有了现实中的感触,就没有了写作的动机.讨论一个关于JScript执行顺序的问题.示例代码如下: a.htm <A onmouseup="func('onmouseup')" href="b.htm">Click Me!</A> <A onclick="func2('onclick')" href="d.htm"&g
-
解决FireFox下[使用event很麻烦]的问题
在FireFox下编写事件处理函数是很麻烦的事. 因为FireFox并没有 window.event . 如果要得到 event 对象,就必须要声明时间处理函数的第一个参数为event. 所以为了兼容IE与FireFox,一般的事件处理方法为: btn.onclick=handle_btn_click; function handle_btn_click(evt) { if(evt==null)evt=window.event;//IE //处理事件. } 对于简单的程序,这不算
-
解决 FireFox 下[使用event很麻烦] 的问题.
在FireFox下编写事件处理函数是很麻烦的事. 因为FireFox并没有 window.event . 如果要得到 event 对象,就必须要声明时间处理函数的第一个参数为event. 所以为了兼容IE与FireFox,一般的事件处理方法为: btn.onclick=handle_btn_click; function handle_btn_click(evt) { if(evt==null)evt=window.event;//IE //处理事件. } 对于简单的程序,这不算
-
textContent在Firefox下与innerText等效的属性
在IE和Opear下,DOM对象支持innerText属性,可以很方便的去除HTML标签. 但在Firefox不支持该属性,好在FF下的DOM对象支持textContent,该属性与innerText等效. 演示实例: <p id="TestObj">Hi,I'm <strong>cnlei</strong>.Welcome to my homepage:<a href="http://www.cnlei.com">h
-
IE和Firefox下javascript的兼容写法小结
1.发现IE下input标签的id属性默认和name属性相同,而Firefox必须明确写出id属性的名称否则不能使用id属性. 如:<input type="text" name="username" value=""> 在IE下如下代码可以执行而在Firefox下却不可以: <script> alert(document.getElementById("username").value); </
-
css pointer控制在firefox下显示手型的代码
在ie下设置 css 样式 style="cursor:hand;" 可以正常显示 但是在firefox下就不行 改用 style="cursor:pointer;" 则在两个浏览器下都能正常显示 但只适用于IE6.0及以上版本以及FIREFOX,在IE5.0下不能显示成手
-
firefox下jquery ajax返回object XMLDocument处理方法
在firefox下使用jquery ajax处理struts2 返回json类型的时候,ajax执行成功返回结果为 [object XMLDocument]. 处理办法:在getWriter.print():前面加上一行代码 复制代码 代码如下: ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
-
firefox下javascript实现高亮关键词的方法
复制代码 代码如下: IE下有: var range = document.createRange(); FireFox下有: var range = document.body.createTextRange(); IE下有findText及pasteHTML,但是fireFox下就没有!怎么办?查了好多资料,都没有能说出个所以然的,皇天不负有心人,终于让我给搞出来了! 注:我这里不是用正则替换,因为正则替换有它的不足之处! 不知道先前有没有高人研究过这种方法. Untitled
-
E3 tree 1.6在Firefox下显示问题的修复方法
tree 在Firefox下只显示一句话: 用firebug查看页面元素观察发现 两个script导入被一个<script>分隔开了,显然是document.write的问题.由于Firefox对js规范的检查比较严格,肯定一些字符输出的的时候没有转义. 查看e3 tree的源代码: /E3Tree/src/net/jcreate/e3/tree/ext/ExtTreeBuilder.java /E3Tree/src/net/jcreate/e3/tree/ext/OutlookExtTree
-
IE与Firefox下javascript getyear年份的兼容性写法
IE与Firefox下javascript getyear年份不同浏览器 JavaScript 的getyear年份函数兼容性问题 先举个例子 用 Firefox 上一些网站会看到这样的提示 现在时间是 106年8月8日 而用 ie 浏览器的话就显示正常的 2006年8月8日 原因就是 javascript 的兼容性问题 var today = new date(); var year = today.getYear(); 在 Firefox 里面 getYear 返回的是 "当前年份-1900
随机推荐
- Mac操作系统下MySQL密码忘记后重置密码的方法
- 降低PHP Redis内存占用
- 详解java.lang.reflect.Modifier.isInterface()方法
- 深入解析java HashMap实现原理
- oracle中not exists对外层查询的影响详解
- 理解JavaScript中的事件
- android downsample降低音频采样频率代码
- javascript的原生方法获取数组中的最大(最小)值
- asp下实现UrlEncoding转换编码的代码
- nginx安装第三方模块的方法
- 在SQL Server中实现最短路径搜索的解决方法
- sqlserver isnull在数据库查询中的应用
- JsDom 编程小结
- C++文件上传、下载工具
- Android中RecyclerView实现横向滑动代码
- 浅谈springboot 属性定义
- C++中求组合数的各种方法总结详解
- swiper 解决动态加载数据滑动失效的问题
- Android 如何使用短信链接打开APP
- nodejs二进制与Buffer的介绍与使用