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

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

我不能/不想在

标签上使用属性“onload”。

【问题讨论】:

标签: javascript dom javascript-events


【解决方案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),但有很多选择。

【讨论】:

  • 谢谢,听起来很完美,我会试试
猜你喜欢
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
相关资源
最近更新 更多