Дом загружен событие через родной код JavaScript - PullRequest
1 голос
/ 18 ноября 2011

Я работаю без фреймворка javascript, но хочу вызвать функцию только при загрузке DOM.

Я не могу / не хочу использовать атрибут 'onload' в теге .

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011

Я думаю 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>
1 голос
/ 18 ноября 2011

Вот код:

  • в браузерах, отличных от IE, используйте событие DOMContentLoaded
  • в верхнем фрейме IE использовать хак с прокруткой (см. _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);
1 голос
/ 18 ноября 2011

Боюсь, что загруженный кросс-браузер и DOM не легко соединяются. По рекомендации Райан Морр ondomready (https://github.com/ryanmorr/ondomready), но есть тонна альтернатив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...