欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Internet Explorer cannot open the Internet site

shiping1 的头像
昨天遇到个怪问题,Internet Explorer cannot open the Internet site,Operation aborted。
起因是我写了个服务器断控件,该控件需要在前端生成一个控制该控件的对象,
当时我采用直接往客户端注册javascript代码的方式:
<script>
var jsxxx;
var c;
jsxxx.xxx = '123';
appendCtrl(jsxxx)
</script>
在这里我使用了一个包装过的方法,就是把这个控件append到document.body上去
这时就出现了这个问题,当时我百思不得其解

最后发现只要我把这段js代码放到</html>的后面,就能正常运行
所以我推测错误是这样引起的
控件在生成的过程中,因为js代码的原因,就在body还没有生成完成的时候(还没有生成</body>),
就运行了该段js代码,倒置document无法找到完整的body,所以报错

解决方式:
往前端注册一个函数
<script>
var jsxxx;
var c;

var xxx = function () {
    jsxxx.xxx = '123';
    appendCtrl(jsxxx)
}

window.attachEvent('onload', xxx);
</script>
然后将这个函数附加到window.onload事件中,问题解决
 
2
0
(请您对文章做出评价)
» 下一篇:ASP.NET 的Request对象的属性 (转)
posted on 2008-05-14 11:46 wilbur 阅读(3329) 评论(2) 编辑 收藏

FeedBack:
2008-12-04 13:28 | bobing[未注册用户]
我也遇到这个问题是用ie6.0出现的
换成ie8.0或firefox就可以了
原因和你想的一样。但是为什么别的浏览器就能在body还没有生成完成的时候运行js呢?????就ie6.0不行?
应该另有他因吧!
  
2008-12-04 14:19 | bobing[未注册用户]
补充一下啊!
firefox不支持attachEvent
这样区分一下就好了
//ie
if (window.ActiveXObject)
{
window.attachEvent('onload', xxx);
}//Firefox, Mozilla, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
window.addEventListener("load",xxx,false);
}


来自 http://www.cnblogs.com/wilbur/archive/2008/05/14/1196500.html

欢迎访问我的新主页:http://huoding.com/

作者:老王

最近在公司做了一个项目,测试时遇到问题:IE6/7报错:Internet Explorer cannot open the Internet site。

先用少量代码重现一下问题:

<html>
<head>
<title>test</title>
</head>
<body>

<div>
<script>
var p = document.createElement("p");
p.innerHTML = "test";
document.body.appendChild(p);
</script>
</div>

</body>
</html>

用IE6/7浏览上面代码就能看到错误信息了(IE8,Firefox表示情绪稳定),如果没有相关版本IE,可以使用IETester。逐句调试,会发现源头是document.body语句,只要javascript脚本包含在div,table之类的容器中,再对document.body做任何操作都会触发这个问题。

解决方法有几种,比较简明的是使用类似window.onload的方法等DOM加载完成后再执行javascript代码。

通过网络搜索到了一些相关资料,里面详细介绍了问题的原因及解决方法,有兴趣可参阅:

Internet Explorer Programming Bugs
Why do I receive an "Operation aborted" error message when I visit a Web page in Internet Explorer?

来自  http://hi.baidu.com/thinkinginlamp/item/651d98f11fdd3e0dd89e72e6


在IE6下发生Internet Explorer cannot open the Internet site错误-
发布:mdxy-dxy 字体:[增加 减小] 类型:转载

最近在IE6下面时常会发生“Internet Explorer cannot open the Internet site ”错误。
-
具体出现的情况是这样的:
  在页面还没有完全加载的情况下,鼠标点击触发了一个生成iFrame的脚本事件。
先是想到,将脚本事件,在页面加载完全后,再动态添加到触发的位置,这样,页面加载完全之前,这里是不会有脚本事件的,自然也不会报错。
  以上办法有些被动,于是去参看生成iframe的脚本。
  正常的页面结构是
复制代码 代码如下:
<body>
<form>
........
</form>
</body>

生成iframe的脚本是:
复制代码 代码如下:
function CreateiFrame(){
  var objBody = document.getElementsByTagName("body").item(0);
  var objiFrame = document.createElement("iframe");
  objBody.appendChild(objiFrame);
}

appendChild() 方法,在节点的子节点列表末添加新的子节点。所以创建iframe后的DOM为:
复制代码 代码如下:
<body>
<form>
........
</form>
<iframe>
........
</iframe>
</body>

因为是在<form>还没有加载完全的情况下,创建了<iframe>,所以在IE6下就出现了页面错误。
相信在看到这里的时候,已经发现了解决的办法:将<iframe>创建在<form>之前的话,就没有问题了!
那么,我们就需要用到另外一个添加元素的方法 insertBefore():
复制代码 代码如下:
function CreateiFrame(){
var objBody = document.getElementsByTagName("body").item(0);
var objiFrame = document.createElement("iframe");
objBody.insertBefore(objiFrame,document.getElementById("form1")); //form1为form的id
}

insertBefore() 方法,在节点的子节点列表任意位置插入新的节点。
insertBefore有2个参数可以设置,第一个是和appendChild相同的;第二可以为null,效果等同于insertBefore() 方法,也可以为指定需要在哪个子节点之前插入新子节点。
复制代码 代码如下:
<body>
<iframe>
........
</iframe>
<form id“form1”>
........
</form>
</body>
详细出处参考:http://www.jb51.net/article/23974.htm
详细出处参考:http://www.jb51.net/article/23974.htm
详细出处参考:http://www.jb51.net/article/23974.htm
详细出处参考:http://www.jb51.net/article/23974.htm
详细出处参考:http://www.jb51.net/article/23974.htm
详细出处参考:http://www.jb51.net/article/23974.htm
详细出处参考:http://www.jb51.net/article/23974.htm
详细出处参考:http://www.jb51.net/article/23974.htm

来自 http://www.jb51.net/article/23974.htm
普通分类: