IE6下的Aborted解决办法

造成IE6报Aborted的情况有很多,本文着重解析<a>标签中添加onclick事件时导致的Aborted情况。
<a onclick="dosomething()" href="javascript:void(0);">test</a>

关于javascript:void(0)与return false;已经有很多高手对其进行过分析:

[url=http://blog.minidx.com/2007/10/29/29.html]慎用javascript:void(0)[/url]
[url=http://www.tizag.com/javascriptT/javascriptvoid.php]javascript:void(0)[/url]

上面两个链接中,第2个解析最清晰:void(0)返回的是一个null,指页面跳转到没有内容的链接,即不跳转。
第一个链接,则对void(0)及 onclick 中是否需要return false;作了一些猜测。
通过测试案例来分析:
  
<html>
<head>
<script type="text/javascript">
function test() {
window.location.href='http://www.baidu.com';
alert(3);
}

function test2() {
document.getElementById('myimg').src='http://www.google.com.hk/images/nav_logo_hp2.png';
}
</script>
</head>
<body>
<a onclick="test();" href="http://www.google.com.hk">test1</a>
<a onclick="test();" href="javascript:void(0);">test11</a>
<a onclick="test();return false;" href="javascript:void(0);">test12</a>
<a onclick="test();" href="javascript:alert(4);">test13</a>
<a onclick="test();" href="javascript:window.location.href='http://www.qq.com';alert(4);">test14</a>

<a onclick="test2();" href="javascript:void(0);">test2</a>
<a onclick="test2();return false;" href="javascript:void(0);">test21</a>
<img id="myimg" src="http://static.googleadsserving.cn/pagead/imgad?id=CICAgICQzpSE8QEQoAEY2AQyCKKNlbkoPd3Q"></img>
</body>
</html>

上述代码中:
示例1:点击test1,则先alert(3),然后跳转到了href的google页面,而非baidu,说明onclick中的跳转并没有被执行,而是记录在浏览器中,真正执行的是href中的链接指向;
示例2:点击test11,则先alert(3),然后没有跳转到baidu页面,链接跳转由href中的返回值决定;
示例3:点击test12,则先alert(3),然后跳到baidu页面,链接跳转由onclick中的决定,而且href中有javascript代码的话也不再执行;
示例4:点击test13,则先alert(3),然后再alert(4),没有出现跳转,链接由href决定;
示例5:点击test14,则先alert(3),然后alert(4),跳转qq.com,链接由href决定。

由此得到结论:a 标签中,onclick方法,关于页面跳转的开关被缓存起来,遇到return false;时才进行装载或者进行页面跳转,若href中指定有任何的内容,则onclick中的关于页面跳转的设置都不生效,即href中的优先级高一些(当href中出现跳转到其他页面时,不做onclick中的跳转,有一定的道理)。

示例6:点击test2,图片无法装载,因为href以为要跳转到一个空的页面,所以其他资源没有必要装载,无法进行显示,如果可以的话倒可以在httpwatch上看看是否已经发送请求去load图片(我预料,它是不发送请求的)。
2011-12-08,经过今天的测试,IE6下的httpwatch请求为:
[img]http://dl.iteye.com/upload/attachment/601268/27e894b0-c893-3186-a84d-8a203e9fd1a4.jpg[/img]
IE9下的httpwatch记录为:
[img]http://dl.iteye.com/upload/attachment/601270/e382c57a-5fee-360b-bd46-18654b3c1410.jpg[/img]
在chrome下的httpwatch为:
[img]http://dl.iteye.com/upload/attachment/601272/be1d0ea4-28e6-39ec-b604-51ed8daf639b.jpg[/img]
示例7:点击test21,图片装载成功,onclick中的return false;是让onclick中关于src,href等请求都执行完,然后再去执行href中的逻辑,即将跳转逻辑的优先级放置到onclick中。

由此再得到一个结论:IE中认为href中可能要跳转到其他的页面,那么图片的src设置也是不必要的,其余的浏览器都没有这样的问题,其余的浏览器都已经形成共识:即使存在href=”javascript:void(0);”这些逻辑,在chrome下测试了:也是先执行onclick代码,并将其中的href页面跳转行为缓存起来,但是图片请求仍然进行,然后再是执行href中的逻辑,与添加return false;的优先级相似。

所以为兼容IE6,在设置href的同时,在onclick中使用return false;来提前处理一些图片装载等或者是页面跳转等行为。

希望对大家理解javascript:void(0) 以及在IE6下的 οnclick=”dosomething();return false;” 的理解有所帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "debugger aborted" 是指调试器中止了程序的执行。这通常是由于程序中存在错误或异常情况导致的。要解决这个问题,您可以尝试以下几个步骤: 1. 检查代码中是否存在语法错误或逻辑错误,并进行修复。 2. 检查程序是否有足够的内存和资源来运行,并进行必要的优化。 3. 确保您使用的调试器和编译器是最新版本,并尝试更新它们。 4. 如果问题仍然存在,请尝试使用其他调试器或工具来诊断问题。 5. 如果您无法解决问题,请寻求专业的技术支持或咨询。 ### 回答2: debugger aborted是调试器终止了当前的调试进程,通常出现的情况是由于出现了一个严重错误导致的。解决这个问题通常需要找到引起错误的原因并进行修复。 以下是一些可能导致debugger aborted的原因以及相应的解决方案: 1. 代码中存在无限循环或类似问题,导致调试器无法继续,此时需要找到代码问题所在,修复代码逻辑。 2. 程序崩溃,例如使用了未初始化的变量或进行不合法的操作,此时需要通过排查日志或使用调试器来找到错误原因。修复代码或增加相应的异常处理逻辑即可。 3. 程序运行过程中发生了内存泄漏或其它内存问题,导致调试器无法继续,此时可以使用内存分析工具来帮助诊断问题,并针对性的修复代码。 4. 程序安装的库文件或环境出现问题,导致调试器无法正常工作。需要重新安装相应的库文件或环境。 总之,解决debugger aborted问题需要仔细分析错误日志,找出错误原因,针对性的进行修复。对于一些比较复杂的问题,可以借助于专业的调试工具来辅助诊断和解决。 ### 回答3: debugger aborted是指调试器在执行时出现了错误,无法继续执行。这个错误可能由于程序代码中的语法错误、内存泄漏、线程死锁等原因而引起。对于开发人员而言,这是一种常见的问题,因此正确的解决方法是非常关键的。 通常,要解决debugger aborted错误,需要进行以下步骤: 1. 检查代码:检查代码中是否存在语法错误、逻辑错误等。使用调试器逐行执行代码,查看在哪个位置出现了错误。如果出现了内存泄漏等问题,可以使用Memory Analyzer等工具进行内存泄漏分析。 2. 升级工具:如果使用的调试工具版本过低,可能会出现一些错误。可以升级调试工具到最新版本,以便解决一些版本兼容性问题。 3. 更新操作系统:有时操作系统也会出现一些问题,导致调试器出现错误。可以尝试更新操作系统到最新版本,以解决这些问题。 4. 重启计算机:在处理完以上步骤之后,如果调试器仍然没有恢复正常工作,可以尝试重新启动计算机。有时候,重置电脑可以消除诸如内存泄漏、资源竞争等问题。 总的来说,要解决debugger aborted问题,需要针对具体的情况进行分析和解决。需要开发人员具备一定的技术能力和经验,才能快速有效地解决这种问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值