[IE技巧] IE的 "已终止操作" (Operation Aborted) 之谜

本文详细解释了在使用IE浏览器时出现的“已终止操作”错误的原因,此错误由HTML解析器在特定条件下触发,例如当脚本尝试在未关闭的DOM节点中添加元素时。IE8对此进行了改进。

用IE 浏览网页,有时候会看到弹出对话框 “Internet Explorer无法打开站点……已终止操作” (如下图)。 


已终止操作






没有错误信息,让人百思不得其解。 这篇IE的blog 对这个问题有详细的讲解。

这个错误其实是由IE的 HTML Parser (解析器) 抛出的,发生在如下条件
  • HTML 网页正在被解析
  • 脚本程序Javascript/VBsciprt 正在被执行
  • 脚本程序试图在HTML DOM树里未关闭父/祖先节点添加/删除 一个元素。

以下就是触发以上3个条件的代码示例:
  1. <html>  
  2. <body>  
  3.   <div> 
  4.    <script type="text/javascript"
  5. var newElem = document.createElement('foo'); 
  6.     document.body.appendChild(newElem); 
  7.    </script> 
  8.   </div> 
  9. </body> 
  10. </html> 
更多类似的代码示例,可以在 http://support.microsoft.com/default.aspx/kb/927917 找到。 

值得一提的是, IE8去掉了这个对话框, 改在状态栏里面提示脚本程序错误,使用户体验好很多。

Operation Aborted









在开发或系统运行过程中,遇到 `error 28: operation aborted` 是一个常见的错误,通常表示某个操作在未完成之前被中断或取消。该错误可能出现在不同的上下文中,包括但不限于网络通信、文件 I/O 操作、线程或异步任务中断等场景中。 ### 错误原因 1. **网络通信中断** 在进行网络请求时,如果远程服务器突然关闭连接、响应超时或客户端主动取消请求,可能导致操作被中断。例如,在 Python 中使用 `requests` 库访问目标网站时,若连接超时或服务器关闭连接,会抛出类似 `('Connection aborted.', error(54, 'Connection reset by peer'))` 的异常[^3]。 2. **I/O 操作中断** 在执行文件读写或设备通信时,如果系统检测到中断信号(如用户中断、硬件故障或资源不可用),则会抛出 I/O 操作被中断的异常。例如 Java 中的 `IOException: An I/O Operation Failed or Was Interrupted` 即属于此类情况[^4]。 3. **异步任务或线程中断** 在并发编程中,若某个线程或任务被主动中断(如调用 `Thread.interrupt()`),则正在进行的操作可能被中止并抛出 `operation aborted` 错误。 4. **系统或库内部错误** 在某些系统调用或第三方库中,若底层资源管理器(如 NCCL、MPI 等)检测到通信超时或状态异常,也可能主动中止操作并返回 `operation aborted`。例如在分布式训练中,NCCL 可能因通信超时而中止操作,导致 `RuntimeError: NCCL communicator was aborted` 的错误[^2]。 5. **开发环境配置问题** 在使用 Fortran 语言调用 IMSL 数学库时,若开发环境(如 VS、IVF、IMSL)版本不兼容或配置路径错误,也可能导致编译或运行时出现 `Complication Aborted. Internal Error.` 的异常[^1]。 --- ### 解决方案 1. **检查网络连接与超时设置** 若错误出现在网络请求中,建议检查目标服务器是否正常运行、网络是否稳定,并适当增加连接和读取超时时间。例如在 Python 中可通过设置 `timeout` 参数避免超时中断: ```python import requests response = requests.get('https://example.com', timeout=10) ``` 2. **处理 I/O 操作中断** 在文件或设备操作中,应确保资源可用且未被其他进程占用。同时,在代码中使用 `try-except` 结构捕获 `IOException` 并进行重试或日志记录,有助于提高程序健壮性[^4]。 3. **避免线程或任务中断** 在并发编程中,避免不必要的线程中断操作,或在中断后进行适当的状态清理。若使用异步框架(如 Python 的 `asyncio` 或 Java 的 `ExecutorService`),需确保任务取消机制正确实现。 4. **排查 NCCL 或 MPI 通信问题** 对于分布式训练中出现的 NCCL 错误,建议检查集群节点之间的网络连接、通信带宽及负载均衡情况。此外,可尝试降低通信频率、调整超时阈值或更新 NCCL 版本以提高稳定性[^2]。 5. **重新配置开发环境与依赖库** 若使用 IMSL 等第三方库时出现编译或运行时错误,可尝试重新安装或更换版本,确保与当前使用的编译器(如 IVF)和 IDE(如 Visual Studio)兼容。此外,检查环境变量和项目配置路径是否正确,避免链接失败或运行时异常。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值