环境:windows sp2/sp3 + IE7
现象:包含有Active的网页加载时——A 有互联网时此页面访问速度还正常 B 只有内网时访问此页面感觉缓慢无比
解决IE在不能上因特网时Active加载慢问题:
定位object加载问题:
<object classid="clsid:XXX" width="0" height="0" id="icRwObj" ></object> <script type="text/javascript"> $(document).ready(function() { alert('网页全部加载完毕了!'); }); </script>
打开页面时:发现页面内容已经显示,说明网页不慢,但迟迟不打印:'网页全部加载完毕了!';大约需要20s才能打印出来
监控tcp通讯(wireshark):发现页面显示后,active加载停顿的20s,在不断的dns查询active.microsoft.com,在有网络情况下发现是请求此url: http://activex.microsoft.com/objects/ocget.dll
查询网站,找到微软官方回答
所以只要设置codebase到一个不存在的地址就可以了,设置为http地址,不行,会弹出安装active提示;设置为本地地址,一切OK
解决:object添加CODEBASE="C:\WINDOWS\system32\" CodeBaseSearchPath='<%=request.getContextPath() %>/' 两个属性就可以了
首先:严重向给为之前看到前一段删除的文字的兄弟姐妹们道歉——因为那是错误的
以上被删除的文字严重阻碍了您的视角和思维,因为此方法完全错误,今天在演示后,发现使用以上文字操作后,active根本加载不了,怪不得网页加载变快
最后查询注册表发现此activex的classid在系统中根本不存在,怪不得它需要去微软的站点查找此classid的控件;
发现系统存在两个读卡activex;其中一个已经被替换了,但是写jsp的人未更新,或者直接copy了老的classid的activex代码导致的,因为此activex找不到,故页面加载时不断的访问网络,请求此activex,更新此classid后一切都变得非常快了
再次打开网页:很快就打印出来了:'网页全部加载完毕了!'
问题解决 ^ ^