Javascript: определить, когда окно полностью загружено - PullRequest
6 голосов
/ 21 июня 2011

У меня есть скрипт, который может быть загружен на любом этапе жизненного цикла веб-страницы. Когда скрипт загружен, он должен запустить метод initialize ().

Я хочу, чтобы эта функция запускалась при событии "onload", но я не могу быть уверен, что страница еще не загружена, то есть, что "onload" еще не запущена.

В идеале мой сценарий должен выглядеть так:

var _initialize = function() { ...};

if(window.LOADED)
    _initialize();
else if (window.addEventListener)
    window.addEventListener('load', _initialize, false); 
else if (window.attachEvent)
    window.attachEvent('onload', _initialize);

Есть ли такая переменная window.LOADED или document.LOADED или что-то подобное?

Спасибо заранее, Шейн

Ответы [ 4 ]

4 голосов
/ 21 июня 2011

Вы можете использовать jQuery для этого.$(document).ready().Отметьте this

Просто вызовите нужную вам функцию в готовом.Затем он будет выполнен после полной загрузки документа

1 голос
/ 21 июня 2011

Если вы не используете какую-либо библиотеку, вы можете использовать эту

    function somelib(){
        this.readystate = false;    //tracks the state of DOM
        var nextcallfunc;       //stores the function to be called after DOM is loaded

    //called by checkReady function when DOM is loaded completely   
        this.ready = function(func){
          // quit if this function has already been called
          if (arguments.callee.done) return;
          // flag this function so we don't do the same thing twice
          arguments.callee.done = true;
          this.readystate=true;     //make DOM load permanent
          nextcallfunc.call();      //calls the onload handler
    }

    //Checks if the DOM has loaded or not
    this.checkReady= function(func){
        /* for Mozilla/Opera9 */
        nextcallfunc = func;

        if (document.addEventListener) {
          document.addEventListener("DOMContentLoaded", this.ready , false);
        }
        /* for Internet Explorer */
        /*@cc_on @*/
        /*@if (@_win32)
          document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
          var script = document.getElementById("__ie_onload");
          script.onreadystatechange = function() {
            if (this.readyState == "complete") {
              ready(func); // call the onload handler
            }
          };
        /*@end @*/

        /* for Safari */
        if (/WebKit/i.test(navigator.userAgent)) { // sniff
          var _timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) {
              this.ready(); // call the onload handler
            }
          }, 10);
        }

        /* for other browsers */
        window.onload = this.ready;
    }

    }

, что также решает проблемы с несколькими браузерами

0 голосов
/ 24 августа 2013

Вот что я делаю (написано на CoffeeScript):

$(window).on 'load', ->
  window._loaded = true

window.on_window_load_safe = (callback) ->
  if window._loaded
    # Since the load even already happened, if we tried to add a new callback now, it would not even
    # get called. So just call the callback immediately now.
    callback.call()
  else
    $(window).on 'load', ->
      callback.call()

Вы можете проверить это примерно так:

  setTimeout(->
    on_window_load_safe ->
      console.debug 'on_window_load_safe called me'
  , 2000)
0 голосов
/ 21 июня 2011

вы можете использовать

jQuery(document).ready();

в конце страницы или непосредственно перед тэгом, и он будет вызываться, пока ваша веб-страница отображается на клиентском компьютере и приблизительно в момент окончания загрузки .....

...