JS 구현 페이지 로드 완료 판단

3012 단어
  • 방안1: 매개 변수는 가지고 갈 수 없지만 여러 번 호출할 수 있다..
    (function()
    {
    	var ie = !!(window.attachEvent && !window.opera);
    	var wk = /webkit\/(\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525);
    	var fn = [];
    	var run = function () { for (var i = 0; i < fn.length; i++) fn[i](); };
    	var d = document;
    	d.ready = function (f){
    		if (!ie && !wk && d.addEventListener) return d.addEventListener('DOMContentLoaded', f, false);
    		if (fn.push(f) > 1) return;
    		if (ie)
    		(function (){
    			try { d.documentElement.doScroll('left'); run(); }
    			catch (err) { setTimeout(arguments.callee, 0); }
    		})();
    		else if (wk)
    		var t = setInterval(function () {
    			if (/^(loaded|complete)$/.test(d.readyState))
    				clearInterval(t), run();
    		}, 0);
    	};
    })();
  • 방안 2: 파라미터를 가지고 있을 수 있지만 여러 번 호출을 지원하지 않는 것 같습니다
    ~function()
    {
    	var FNArray=[];
    	var D = document;
    	window.onReady = function(fallBackFunction)
    	{
    		var argu=[];
    		for (var i=1,len=arguments.length; i<len; i++){
    			argu.push(arguments[i]);
    		}
    		var is_ie = !!(window.attachEvent && !window.opera);
    		if (window.readyBound) return fallBackFunction.apply(this,argu);
    		if(!is_ie) return fallBackFunction.apply(this,argu);
    		FNArray.push(fallBackFunction);
    		readyBound = true;
    		var ready = 0;
    		// Mozilla, Opera and webkit nightlies currently support this event
    		if (D.addEventListener)
    		{
    			// Use the handy event callback
    			D.addEventListener("DOMContentLoaded",
    			function(){
    				D.removeEventListener("DOMContentLoaded", arguments.callee, false);
    				if (ready) return;
    				ready = 1;
    				for (var i=0,len=FNArray.length; i<len; i++)
    				{
    					FNArray[i] ? FNArray[i].apply(this,argu) : 0;
    				}
    			},
    			false);
    		// If IE event model is used
    		}else if (D.attachEvent){
    			// ensure firing before onload,
    			// maybe late but safe also for iframes
    			D.attachEvent("onreadystatechange",
    			function(){
    				if (D.readyState === "complete")
    				{
    					D.detachEvent("onreadystatechange", arguments.callee);
    					if (ready) return;
    					ready = 1;
    					for (var i=0,len=FNArray.length; i<len; i++)
    					{
    						FNArray[i] ? FNArray[i].apply(this,argu) : 0;
    					}
    				}
    			});
    			// If IE and not an iframe
    			// continually check to see if the D is ready
    			if (D.documentElement.doScroll && window == window.top)(function(){
    				if (ready) return;
    				try{
    					// If IE is used, use the trick by Diego Perini
    					// http://javascript.nwbox.com/IEContentLoaded/
    					D.documentElement.doScroll("left");
    				}catch(error){
    					setTimeout(arguments.callee, 0);
    					return;
    				}
    				ready = 1;
    				for (var i=0,len=FNArray.length; i<len; i++){
    					FNArray[i] ? FNArray[i].apply(this,argu) : 0;
    				}
    			})();
    		}
    	};
    }();
  • 방안 3: 페이지의 마지막에..

  • .방안 4: 윈도우.onload 이 방법은 페이지의 모든 자원을 포함하여 그림 등 불러오기가 끝난 후에야 실행할 수 있기 때문에 사용을 추천하지 않습니다..

    좋은 웹페이지 즐겨찾기