Keep on going, never give up.

Internet Explorer无法打开Internet站点的偶尔出错分析

最近在使用Google的使用,经常打开Google.cn页面时会报“Internet Explorer 无法打开 Internet 站点http://www.google.cn/,已终止操作”的错误,然后页面就被重定向到无法显示网页(dnserror.htm)页面,一般刷新一次到两次就可以正常显示,烦不胜烦,这一现象在访问QQ空间的时候经常也会出现,而在FIREFOX上是一点问题都没有,显示完全正常,笔者的操作系统环境是Windows XP SP2,IE版本是6.0,可以说,笔者的机子上是具有相当的“干净”的,笔者从来不安装那些所谓暴风影音、某某助手、工具栏之类的东西,想上到IE工具栏上图标更是难上加难,基本都被干掉了,IE插件也就只安装个FLASH PLAYER,甚至装个金山毒霸,还把所谓的软件管理器也给卸了。但是近日总频繁的出现“Internet Explorer 无法打开 Internet,已终止操作”现象,以前也有过,总是忍忍刷新一下没大在意,今天干脆抽了一个上午来定位这个问题,看看到底是哪里除了问题,顺便做个总结方便遇到相同问题的朋友参考。

网上的解释可谓是五花八门,也罗列了很多可能的解决方法,比如修改IE插件加载等,笔者以为基本大都是由于干扰的IE浏览器的载入动作引起,从而导致渲染或执行上的时间差,引起脚本错误。这里归纳一下:

一、一直显示“Internet Explorer 无法打开 Internet,操作已中止”,刷新也毫无效果

分析总结一下原因:

1、先判断在Firefox或者其它相同环境的机子是否可以正常访问,如果显示OK,最大的可能就是插件的问题,目前可能会引起这一现象的插件有Skype的Add-on、Flash Player,还有干扰IE载入网页进程的程序比如防挂马插件、杀毒软件的脚本检测插件等都可能引起,这个还决定于网页脚本的书写方法和次序。当前加载插件的管理方法是:IE工具栏->Internet 选项->程序->管理加载项,里头可以手动的启用或禁用当前加载项。 另外,IE的权限级别的设置也会影响某些Javascript脚本的执行或访问本机Active控件受到阻止,从而可能引起页面出错。

2、如果FIREFOX访问也不正常,请先判断您的电脑是否可以正常访问网络或其它网站,如果不能,请检查网络连接和DNS解析状态,不行就打电话给中国电信MM,或者找博主帮忙,本文不再讨论。

二、偶尔出现“Internet Explorer 无法打开 Internet站点,已终止操作”的错误,刷新可能正常显示的

这个问题的一般原因如下。

1、Javascript 脚本在IE运行上存在错误,导致页面被重置,这在Webbrower控件使用中笔者深有体会,因为网上很多网站的脚本书写都或多或少的存在问题,导致IE无法正常解析,这个时候可能会弹出默认的脚本调试器等,我们可以禁用脚本调试来测试一下是否可行。

具体方法:IE工具栏 -> 工具 ->Internet选项 -> 高级 选中禁用脚本调试(Internet Explorer)和禁用脚本调试(其他),这两项看是否正常。

2、访问网页的代码存在兼容性问题。笔者在访问GOOGLE出现上文错误的时候,虽然GOOGLE这么厉害,首页也还是存在兼容性问题,这里我们GOOGLE.cn的首页代码给拷贝过来看一下。
<div id=xjsd></div>
<div id=xjsi>
<script>
........window.setTimeout(function(){var xjs=document.createElement('script');
xjs.src='/....../zXRueJQ3aIk.js';
(document.getElementById('xjsd') || document.body).appendChild(xjs)},0);;
.......
</script>
</div>

 

如果按照微软官方的解释,以上代码也是存在问题的,出现此问题的原因子容器 HTML 元素包含试图修改子容器的父容器元素的脚本。 脚本试图使用innerHTML 方法或appendChild 方法修改父容器元素。
A. 如果DIV 元素是在 BODY 元素中的子容器,并在 DIV 元素中的一个SCRIPT 块尝试修改 DIV 元素的父容器的 BODY 元素,可能会出现此问题。
常见两种错误模式:
1.<html> <body> <div>   {这里是Javascript使用innerHtml或者appendChild等方法 尝试修改或添加BODY内容代码部分}   </div>  </body></html>

2.<html><body>
      <table><tr><td>  {深层嵌套的td容器内的Javascript 在此尝试修改或添加BODY内容都可能引起本文错误}</td></tr></table>
  </body></html>

两种模式都可能引起块容器的跨界操作,这个问题影响的IE版本包括:IE 5.5,IE 6.0,IE 7。
造成这个缺陷纯粹因为微软的产品的设计问题,没得救只能躲,再回头看一下GOOGLE的首页程序的“document.body).appendChild(xjs)”那么就存在跨界行为,一旦程序执行后者的document.body.appendChild语句(当然大多数是执行前者document.getElementById('xjsd')就应该没问题的,那么程序将会报出本页的错误,测试也很简单,就是前一个条件“document.getElementById('xjsd') ”去掉,直接运行后一条件。当然如果前面的程序中调用的zXRueJQ3aIk.js文件里头也有appendChild操作执行,那么执行错误将会在调用处提前显现。

三、解决办法

以下的变通方法,大家可以根据自己的IE版本情况参考:

1、如果网站程序是我们自己的,那就很简单,只需要调整一下Javascript的执行位置就可以了,只要放在没有跨界的地方就可以了,关闭该关闭的容器,或者使用一个占位符(比如操控body的操作转向内部一个封闭的子容器DIV块等方法),当然这么设计纯粹是为了兼容性而修改了。因为在IE8和Firefox都没有这个设计缺陷。另外执行函数最好放到封闭容器的外头去,使用onload比使用complete和ready要可靠。因为笔者在测试有些网页载入的时候,可能不一定会报告complete事件,这个特别要小心。此外,还需要我们注意settimeout的使用,时间设置是否得当。

2、 当然更多人是跟笔者一样只是某个网站的用户而已,比如用Google的朋友,没办法把GOOGLE给咔嚓了,大家只能想办法规避一下:
IE6的用户可以考虑关闭 Internet Explorer设置中的“友好HTTP错误消息”。 此替代方法仍然会弹出该死的出错消息对话框。 但是Internet Explorer报错后不会跳跑到默认的错误页面,就是每次访问可能会“咕咚”一声。此替代方法只适用于 Internet Explorer 6。
操作步骤如下:
工具菜单-> Internet选项,在“高级”选项卡上单击以清除“显示友好 HTTP 错误信息”复选框,然后单击确定即可。

3、可以禁用活动脚本在Internet Explorer 中。 通过阻止或提示阻止运行的任何脚本以及ActiveX控件,此办法比较狠,直接不给网页的JS脚本执行。
采用的这个方法,把报错网址添加到受限网站列表中,google.cn底下的JS就是为了加载google的一些产品推介(底下的一排图标),不显示出来而已,大家仍然可以通过“GOOGLE的产品和服务”访问。还有,在正常搜索的时候,右边的推介也被咔嚓了(无广告清净版),全屏显示搜索结果,这样也有一个缺点就是虽然打开GOOGLE首页不报错但是每次打开搜索结果还要点一次“受限提示”窗口,IE6下测试OK,但也不爽*_*。
如果您可以接受,可以按照以下方法设置:
将出现错误的站点添加到受限制的站点,默认情况下受限站点是禁用脚本的。
工具菜单-> Internet选项。在“安全”选项卡上选择“受限站点”区域。单击网站添加,然后单击“确定”即可。

4、升级到IE8也可以解决这个问题,或者怂恿您的用户抛弃微软的IE使用其它浏览器,当然实际上IE也并不是微软的,大家可以看看帮助就明白了,IE使用的内核和FIREFOX内核等都是一个祖宗的,只是后来各自的修改方向不同而已。

更多文章:

网站设计:网页宽度和高度设置参考建议

网站上线功能及兼容性测试小工具集锦

边栏改版:网站博客边栏是右侧好还是左侧好

网站基础:URL伪静态化概念与常见方法

网站偶尔出现Fatal error: Call to undefined xxx错误

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.