【发布时间】:2012-01-01 03:16:59
【问题描述】:
我在没有 javascript 框架的情况下工作,但我想在加载 DOM 时调用一个函数。
我不能/不想在
标签上使用属性“onload”。【问题讨论】:
标签: javascript dom javascript-events
我在没有 javascript 框架的情况下工作,但我想在加载 DOM 时调用一个函数。
我不能/不想在
标签上使用属性“onload”。【问题讨论】:
标签: javascript dom javascript-events
我认为http://code.google.com/p/domready/ 正是您想要的。
如果您曾经编写自己的 JavaScript 文件,但不能依赖 现有的库,并且只想在之后执行 页面已加载,此库适合您。
只需这样做:
<html lang="en">
<head>
<script src="domready.js" type="application/javascript"></script>
<script type="application/javascript">
DomReady.ready(function() {
alert('dom is ready');
});
</script>
</head>
<body>
</body>
</html>
【讨论】:
代码如下:
在IE框架中,只需使用onload
var onready = function(handler) {
// window is loaded already - just run the handler
if(document && document.readyState==="complete") return handler();
// non-IE: DOMContentLoaded event
if(window.addEventListener) window.addEventListener("DOMContentLoaded",handler,false);
// IE top frame: use scroll hack
else if(window.attachEvent && window==window.top) { if(_readyQueue.push(handler)==1) _readyIEtop(); }
// IE frame: use onload
else if(window.attachEvent) window.attachEvent("onload",handler);
};
// IE stuff
var _readyQueue = [];
var _readyIEtop = function() {
try {
document.documentElement.doScroll("left");
var fn; while((fn=_readyQueue.shift())!=undefined) fn();
}
catch(err) { setTimeout(_readyIEtop,50); }
};
jQuery 对 IE 进行了更多调整(大量代码),但在我的测试中,它无论如何都会在 onload 事件之前运行。
var test = function() { alert("ok"); }
onready(test);
【讨论】:
好吧,恐怕跨浏览器和加载的 DOM 并不容易。推荐的是 Ryan Morr 的 ondomready (https://github.com/ryanmorr/ondomready),但有很多选择。
【讨论】: