我正在開發一個使用Web技術開發桌面應用程序的平臺。在這樣做的過程中,我一直在努力獲得一些與瀏覽器配合使用的文檔/準備就緒功能,我將集成到該平臺中。這就是爲什麼我以前在SO上問過這個問題:javascript-framework-that-primarily-provides-just-document-onready-functionality正在檢查DOM矯枉過正的準備情況?
然而,我沒有能夠讓我的瀏覽器選擇(噓,它的祕密;)成功地利用了一個建議的功能和只回答上述問題。所以,在試圖弄清楚可能會發生什麼的過程中,我偶然發現了以下情況。
下面的代碼在這個瀏覽器中具有相同的效果我簡單地通過在1毫秒超時後執行函數來使用:我可以在加載大圖時寫入DOM。這對我來說可能不是最終的解決方案,我可以寫一些具體的東西來說明這個瀏覽器的Javascript引擎如何實現DOM功能。不過,我決定看看它是否可以在標準瀏覽器中正常工作,而且讓我驚訝的是,它確實如此!鑑於此,我的問題是:各種Javascript框架提供的dom/readyiness功能的各種實現,只是矯枉過正?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
setTimeout(function() {
var txtNode = document.createTextNode("ready_yet?");
var ready_yet_el = document.getElementById("ready_yet");
ready_yet_el.appendChild(txtNode);
},1);
</script>
</head>
<body>
<div id="ready_yet"></div>
<img src="http://www.ryanmorr.com/tests/ondomready/pic.jpg" />
</body>
</html>
編輯/再思考 在the page linked to by the answer to my previous related question它指出:「對於Firefox和Opera的事件類型的簡單檢查將確定它是否是DOMContentLoaded。Safari和IE將檢查對文檔的準備狀態....終於在如果一切都失敗了,onload事件會引起後面的情況。「或許一個類似於我的setTimeout的setInterval可能是倒數第二的行爲,在依靠onload作爲最後的手段之前?無論如何,在我選擇的嵌入式瀏覽器中,DOMContentLoaded事件和document.readyState都不受支持。
你的例子的工作原理是因爲(你可能知道)在div被解析之後調用超時函數,一個更簡單的版本會在div關閉後運行(沒有超時)腳本,而不是規範,但所有瀏覽器在繼續解析xml/html節點(或者至少在下一個dom元素被完全讀取和執行之前可用)之前將使dom節點可用。 – meandmycode 2009-09-04 20:58:37
我認爲你在前3個小時中得到的答案只能讀取問題的標題。他們都說「不,在DOM準備好之前運行腳本是不好的」。 – 2009-09-05 00:26:30
我希望得到更嚴厲的處理;)但是爲了得到我的直覺的確認,即使提到其他人已經「毆打我」,這正是我所尋找的,並且讓我繼續下去這條路有一定的信心;接下來我會看看CSS選擇框架(如Peppy或Sizzle)是否可以與這個特定的瀏覽器實現協同工作。 – 2009-09-05 07:06:34