整理这篇文章是因为今年春节在外地没回去,所以这么晚还在网吧上网,看到网吧经典的ie6打开百度都报错,感觉很是不爽,还好我自己习惯了用chrome内核的浏览器,但其他人就不行了,刚刚听到有人问网管怎么解决打不开百度的问题,我仔细分析了下,貌似是百度的龙年新logo对于ie6不兼容所致,故这里整理发表此文,另外,想体验下百度龙年动态logo,还是用高版本的ie或者其他内核浏览器吧!
通过网上资料得知,如果js改变dom element,而该element尚未加载完毕,就会造成ie下无法打开站点的错误警告。
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<title>Test</title>
</head>
<body>
<div id=”test”>
<!– 这里要放置一个element,js在这个element –>
<div>
<script type=”text/javascript”>
// 这里的js就会造成ie下无法打开站点
document.getElementById(“test”).appendChild(document.createTextNode(“Hello world”));
</script>
</div>
<script type=”text/javascript”>
// js放在这个位置就不会造成ie里的错误。
// document.getElementById(“test”).appendChild(document.createTextNode(“Hello world”));
</script>
</div>
</body>
</html>
******************************************************************************
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后的代码,会被解释器认为是载入页面的时候跳过去的,可以执行。
看了这些,相信大家应该知道怎么解决了吧?!
21:05 刚刚发过文章,回到百度首页,看到的龙不会动了,感觉可能已经可以用IE6访问百度了,测试一下,果然如此,动态的龙的js已经撤掉了,百度真是百度,还是有人会注意IE的,小小的夸你一下,百度的技术部门,以后想出新记着测试好了。不过这次从我发现问题到问题解决算起来至少有四个小时了,不知道困惑多少人呢?!
23:00 百度再深圳我所在的地区确实出现一段动态logo不能动的情况,现在又恢复了,在之前一直看不到动态的那段js,问其他地方的朋友,没人相信,不知道有人清除缓存尝试没。现在的情况是ie6打开百度首页也不报错了,终于js控制好了。