Dom 加载事件跨浏览器原生 javascript 代码

Posted

技术标签:

【中文标题】Dom 加载事件跨浏览器原生 javascript 代码【英文标题】:Dom loaded event cross borwser native javascript code 【发布时间】:2012-01-01 03:16:59 【问题描述】:

我在没有 javascript 框架的情况下工作,但我想在加载 DOM 时调用一个函数。

我不能/不想在

标签上使用属性“onload”。

【问题讨论】:

见***.com/questions/732801/… 【参考方案1】:

我认为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>

【讨论】:

谢谢你听起来很完美,我会试试的,看起来像格雷厄姆的回答【参考方案2】:

代码如下:

在非 IE 浏览器中,使用 DOMContentLoaded 事件 在 IE 顶部框架中使用滚动 hack(参见 _readyIEtop)

在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);

【讨论】:

我不明白你为什么说我,如果这些都不起作用,你不确定你的答案,更多你说mae use onload????你有没有回答我的问题? 请原谅我的英语:“如果这些都不起作用”我的意思是“如果不是这样” - 请参阅我的代码中的 cmets。我在这里测试过 - jsfiddle.net/yCLZL【参考方案3】:

好吧,恐怕跨浏览器和加载的 DOM 并不容易。推荐的是 Ryan Morr 的 ondomready (https://github.com/ryanmorr/ondomready),但有很多选择。

【讨论】:

谢谢,听起来很完美,我会试试

以上是关于Dom 加载事件跨浏览器原生 javascript 代码的主要内容,如果未能解决你的问题,请参考以下文章

原生javascript跨浏览器常用事件处理

javascript原生判断DOM是否加载完毕执行方法

JavaScript跨浏览器绑定事件函数的优化

跨浏览器的javascript事件的封装

React事件

原生jsjs动态添加dom,如何绑定事件