Internet Explorer无法打开Internet站点 跟JS执行时间是关系

来源:互联网 发布:寻找音乐出处软件 编辑:程序博客网 时间:2024/05/23 21:46

以下是在网上找的一些资料提供参考!!

在加了一个JS文件引用后,出现了Internet Explorer无法打开Internet站点的提示,看了下JS代码,发现是JS里用了setAttribute,而页面是在还没装载完成时调用了此JS里的方法了,在网上查了下解决办法,在JS文件引用时,加一个defer属性即可!

以下为详细介绍

 

internet explore 无法打开internet站点...,已终止操作原因及解决办法:

1.html标签有遗漏(缺结束标记)
2.js问题,有可能是页面没加载完毕引起的. 加defer属性.

〓关键点〓:

加上defer等于在页面完全载入后再执行,相当于 window.onload ,但应用上比 window.onload 更灵活!

页面载入判断

对于含有<iframe>的页面,错就错在 <iframe 这里了,页面还没完成,就跑 <iframe ,<iframe 还没引发完成就跳转,导致游览器中断,所以就出现了 “internet explore 无法打开internet站点...,已终止操作”


Script中的Defer属性 JS性能 系统性能
script中的defer属性默认情况下是false的。按照DHTML编程宝典中的描述,对于Defer属性是这样写的:
Using the attribute at design time can improve the download performance of a page because the browser does not need to parse and execute the script and can continue downloading and parsing the page instead.
也就是说:如果是编写脚本的时候加入defer属性,那么浏览器在下载脚本的时候就不必立即对其进行处理,而是继续对页面进行下载和解析,这样会提高下载的性能。
这样的情况有很多种。比如你定义了很多javascript变量,或者在引用文件(.inc)中写了很多的脚本需要处理,那不妨在这些脚本中加入defer属性,对性能的提高肯定有所帮助。
举例如下:
<script language="javascript" defer>
....
//defer属性默认=false
//<script language="javascript" defer>显式声明defer属性后等同于<script language="javascript" defer=true>
</script>

声明了defer属性之后,需要判断是否有别的变量引用了defer脚本块中的变量,否则的话会导致脚本错误的产生。

注意:
1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。
2、不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。


     在你的网页已截入完成后,你想动态添加JS脚本时用的,如果你只是object.innerHTML = "<script" + ">"..."</script" + ">";那么当你调用你这个新定义的东东就会出错,说还未定义,当你在上面的代码加入defer时那么你就能成功调用它,在下面的代码中你可以试下把它去掉, defer ,那么你就会发现问题!
<HTML>
<SCRIPT>
function insertScript(){
var sHTML="<input type=button onclick=" + "go2()" + " value='Click Me'><BR>";
var sScript="<SCRIPT defer>";
sScript = sScript + "function go2(){ alert('Hello from inserted script.') }";
sScript = sScript + "</SCRIPT" + ">";
ScriptDiv.innerHTML = sHTML + sScript;
}
</SCRIPT>
<BODY onload="insertScript();">
<DIV ID="ScriptDiv"></DIV>
</BODY>
</HTML>

//defer属性指示该段脚本不会改变文档的内容。在文档完全显示之前,js解释器不执行这段代码。
具体到这个例子,因为js不允许动态生成js代码,所以去掉defer后产生的代码会被认为是非法的。加上defer后的代码,会被解释器认为是载入页面的时候跳过去的,可以执行。