IE提示“無法打開Internet站點…”分析解決打賞

整理這篇文章是因為今年春節在外地沒回去,所以這么晚還在網吧上網,看到網吧經典的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控制好了。

IE提示“無法打開Internet站點…”分析解決
文章《IE提示“無法打開Internet站點…”分析解決》二維碼
  • 微信打賞
  • 支付寶打賞

已有2條評論

  1. 朱定聰

    分析的到位~!

    2012-02-01 10:55 回復
    • 窮小子

      這段沒什么寫的了,隨便寫寫,呵呵

      2012-02-01 21:37 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖