페이지가 완전히로드되었을 때 기능을 실행하는 방법은 무엇입니까?


306

페이지가 완전히로드되면 JavaScript 코드를 실행해야합니다. 여기에는 이미지와 같은 것들이 포함됩니다.

DOM이 준비되었는지 확인할 수 있지만 페이지가 완전히로드 된 시점과 같은지 모르겠습니다.


7
그렇다면 DOM이 준비되었는지 어떻게 확인합니까?
Mads Skjern

답변:


441

이라고 load합니다. DOM 준비가 끝나기 전에 와서 실제로 왔으며 DOM 준비는 실제로 load이미지 를 기다린 정확한 이유로 만들어졌습니다 .

window.addEventListener('load', function () {
  alert("It's loaded!")
})

3
따라서 모든 페이지 구성 요소 / 리소스 (예 : * 이미지 포함) window.onload가있을 때 DOM 준비와 비교하여 명확히하기 위해 (가능한 경우) 호출됩니다 . 내가 맞아?
BreakPhreak

19
@BreakPhreak : yes :) onload는 문서의 일부인 모든 리소스를 기다립니다. 물론 AJAX 요청과 같이 문서 자체의 일부가 아닌 동적으로 작성된 요청은 제외됩니다.
Matchu

3
스크립트가 완전히로드되지 않았습니다
HD ..

핸들러를 추가하기 전에 스크립트를 동적으로로드하고 "로드"이벤트가 발생하면 어떻게합니까?
pamelus

31
더 좋은 방법은 addEventListener("load", function(){... 속성 })을 덮어 쓰는 대신입니다 onload.
user4642212

30

일반적으로을 사용할 수 window.onload있지만 window.onload뒤로 / 앞으로 가기 기록 단추를 사용할 때 최신 브라우저가 실행되지 않는 것을 알 수 있습니다 .

어떤 사람들 이 문제를 해결하기 위해 이상한 왜곡을 제안 하지만 실제로 window.onunload핸들러를 만들면 (아무 것도하지 않는 핸들러조차도) 모든 브라우저 에서이 캐싱 동작이 비활성화됩니다 . MDC는 꽤 잘이 "기능"을 문서화하지만, 어떤 이유로 사용하는 사람들 거기에 여전히 setInterval다른 이상한 해킹.

일부 Opera 버전에는 페이지 어딘가에 다음을 추가하여 해결할 수있는 버그가 있습니다.

<script>history.navigationMode = 'compatible';</script>

뷰당 한 번만 호출되는 (그리고 DOM로드가 완료된 후가 아니라) 자바 스크립트 함수를 얻으려는 경우 다음과 같이 할 수 있습니다.

<img src="javascript:location.href='javascript:yourFunction();';">

예를 들어,이 트릭을 사용하여 로딩 화면에서 매우 큰 파일을 캐시에 미리로드합니다.

<img src="bigfile"
onload="this.location.href='javascript:location.href=\'javascript:doredir();\';';doredir();">

누구나이 트릭이 어떻게 작동 하는지 명확히 할 수 있습니까 ? 나에게는 너무 복잡해 ..
Razzle

20

완성도를 높이기 위해 DOMContentLoaded에 바인딩 할 수도 있습니다. 이제 DOMContentLoaded가 널리 지원됩니다.

document.addEventListener("DOMContentLoaded", function(event){
  // your code here
});

자세한 정보 : https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded


7
이 답변은 질문에서 묻는 것과 정확히 반대입니다.
Muhammad bin Yusrat

2
실제로 DOMContentLoaded 이벤트는 모든 DOM 컨텐츠가로드 될 때 모든 종속 항목을로드하기 전에 트리거됩니다. 답변 스레드의 사용자가 참조 $.ready했기 때문에 좋은 기여를했다고 생각했습니다. Btw. 이벤트에 여러 가지 콜백을 허용 하기 때문에 addEventListener-method도 사용합니다 load.window.addEventListener("load", function(event){ // your code here });
murb

16

전체 페이지가로드 된 후에 만 ​​실행하십시오.

자바 스크립트로

window.onload = function(){
    // code goes here
};

Jquery 작성

$(window).bind("load", function() {
    // code goes here
});

1
$(window)이것이 jquery라고 생각하게합니다. 아니면 자바 스크립트 구문이 혼란 스럽습니까? (저는 JS를 처음 사용합니다).
Azendale

2
$(document).ready();jQuery를 사용할 수있을 때 단순히 사용하지 않는 이유 는 무엇입니까?
Andreas

당신은 문서 (구문 분석 된 HTML) 또는 다른 것 ( "로드")은 이미지와 스타일을 포함한 모든 것 입니다. 필요한 것에 따라 다릅니다.
amenthes

11

이 코드를 사용해보십시오

document.onreadystatechange = function () {
  if (document.readyState == "interactive") {
    initApplication();
  }
}

자세한 내용 은 https://developer.mozilla.org/en-US/docs/DOM/document.readyState 를 방문 하십시오.


예, 도움이됩니다. 감사합니다 ~
Bravo Yeung

2
"interactive"완전히로드되지 않았습니다. "complete"완전히로드되었습니다
Ryan Walker

마침내! 고마워요, 야곱 여기에 나열된 모든 수많은 방법이 실패했습니다 (최상의 라디오 버튼이 업데이트되고 결과 계산이 수행 될 수 있지만 버튼이 눌러지지 않은 것처럼 보입니다).
secr

8

이미지 등을 포함한 모든 것이로드되면 window.onload 이벤트가 발생합니다.

js 코드를 가능한 빨리 실행하려면 DOM 준비 상태를 확인하고 싶지만 여전히 DOM 요소에 액세스해야합니다.


8

onLoad()이벤트를 사용하는 Javascript 는 페이지가로드되기를 기다렸다가 실행합니다.

<body onload="somecode();" >

jQuery 프레임 워크의 문서 준비 기능을 사용하는 경우 DOM이로드 되 자마자 페이지 내용이로드되기 전에 코드가로드됩니다.

$(document).ready(function() {
    // jQuery code goes here
});

7

docs가 준비되고 페이지의 다른 모든 자산 (이미지 등) 이로 드 될 때까지 문서가 실행되지 않음을 나타내므로 window.onload 를 사용할 수 있습니다 .


아 훌륭합니다. 잘 했어. 페이지의 마지막 이미지는 다음과 같습니다. <img src = "imdbupdate.php? update = ajax"style = "display : hidden"onload = "window.location = 'movies.php? do = admincp'"/> 그러나 그것은 나를 돌보아주지 않음
Ben Shelock

...뭐? 이미지가로드되면 리디렉션 하시겠습니까?
Matchu 2016 년

왜 원하는지 잘 모르겠지만 리디렉션하지 않는 이유는 display : hidden이므로 브라우저가 표시되지 않기 때문에 브라우저가로드하지 않아도됩니다.
Matchu 2016 년

어쩌면 히트를 추적하거나 DB에서 무언가를하는 것과 같이 서버에서 중요한 일을하는 숨겨진 이미지일까요?
Marc Novakowski

나는 그것을 얻을 수 있지만 나중에 리디렉션하는 것이 의미가 없습니다. 사용자가 페이지에서 시간을 보내지 못하게하려면 왜 페이지가 전혀 없습니까? 그리고로드시 리디렉션하는 것이 목표라면, 전체적으로 더 깔끔한 구현이므로 window.onload 이벤트를 사용하지 않는 이유는 무엇입니까?
Matchu 2016 년


2

최신 자바 스크립트 (> = 2015)를 사용하는 최신 브라우저에서는 type="module"스크립트 태그에 추가 할 수 있으며 전체 페이지가로드 된 후 해당 스크립트 내의 모든 항목이 실행됩니다. 예 :

<script type="module">
  alert("runs after") // Whole page loads before this line execute
</script>
<script>
  alert("runs before")
</script>

또한 오래된 브라우저는 nomodule속성 을 이해 합니다. 이 같은:

<script nomodule>
  alert("tuns after")
</script>

자세한 정보는 javascript.info 를 방문하십시오 .


1

대신 많은 onload용도를 사용해야 $(window).load하는 경우 (jQuery) :

$(window).load(function() {
    //code
});

1

온로드 GlobalEventHandlers 믹스 인의 특성은 하중의 이벤트에 대한 이벤트 핸들러 등 창, XMLHttpRequest의 요소, 자원은로드 화재.

그래서 기본적으로 자바 스크립트에는 이미 이미지를 포함하여 어떤 페이지가 완전히로드 된 창에 onload 메소드가 있습니다 ...

당신은 뭔가를 할 수 있습니다 :

var spinner = true;

window.onload = function() {
  //whatever you like to do now, for example hide the spinner in this case
  spinner = false;
};

-1

2019 업데이트 : 이것이 저에게 효과적이었습니다. 목록 항목을 계산하기 위해 데이터를 먼저 실행하고 반환하기 위해 여러 개의 ajax 요청이 필요했기 때문에.

$(document).ajaxComplete(function(){
       alert("Everything is ready now!");
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.