답변:
window.onload = myOnloadFunc그리고 <body onload="myOnloadFunc();">사용하는 다른 방법입니다 같은 이벤트 . 사용 window.onload은 덜 눈에 띄지 않습니다-HTML에서 JavaScript를 가져옵니다.
모든 일반적인 JavaScript 라이브러리 인 Prototype, ExtJS, Dojo, JQuery, YUI 등은 문서가로드 될 때 발생하는 이벤트에 대한 훌륭한 래퍼를 제공합니다. 윈도우 onLoad 이벤트를 수신하고 이에 반응 할 수 있지만 모든 리소스가 다운로드 될 때까지 onLoad가 시작되지 않으므로 마지막 큰 이미지가 페치 될 때까지 이벤트 핸들러가 실행되지 않습니다. 어떤 경우에는 정확히 원하는 것입니다. 다른 경우에는 DOM이 준비되었을 때 청취하는 것이 더 적절하다는 것을 알 수 있습니다.이 이벤트는 onLoad와 비슷하지만 이미지 등을 다운로드하지 않고 발생합니다.
myOnloadFunc()전역 컨텍스트에서 호출 됩니다 ( this참조 window). 자바 스크립트를 통해 설정하면 요소의 컨텍스트에서 실행됩니다 ( this이벤트가 트리거 된 요소를 나타냅니다). 이 특별한 경우에는 차이가 없지만 다른 요소와는 다릅니다.
this를 사용하면 원하는 경우 참조 하는 객체를 무시할 수 있습니다 .
차이는 없지만 둘 다 사용해서는 안됩니다.
많은 브라우저에서 window.onload모든 이미지가로드 될 때까지 이벤트가 트리거되지 않습니다. 원하는 것은 아닙니다. 표준 기반 브라우저에는 이벤트 DOMContentLoaded가 일찍 발생하지만 IE에서 지원하지 않습니다 (이 답변을 작성할 당시). 크로스 브라우저 DOMContentLoaded 기능을 지원하는 Javascript 라이브러리를 사용하거나 사용 가능한 잘 작성된 함수를 찾는 것이 좋습니다. jQuery 's $(document).ready()가 좋은 예입니다.
window.onload몸없이 일할 수 있습니다. 스크립트 태그 만있는 페이지를 작성하여 브라우저에서여십시오. 페이지에 본문이 없지만 여전히 작동합니다 ..
<script>
function testSp()
{
alert("hit");
}
window.onload=testSp;
</script>
<!ELEMENT html (head, body)>[1] - 및 html401 지정 <!ELEMENT HTML O O (%html.content;)과 <!ENTITY % html.content "HEAD, BODY">도 [2]. html51 A head element followed by a body element.은 html 컨텐츠를 나타냅니다 . [3] w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict w3.org/TR/html51/semantics.html#the -html-element- 모든 공통 / 사용 HTML 표준 에는 body 태그 가 필요하다고 생각 합니다. :)
Start tag: optional, End tag: optional
일반적으로 > 이벤트를 사용 하지 않는 것이 좋습니다 <body onload="". 가능한 한 행동을 콘텐츠와 분리하는 것이 더 깨끗하다고 생각합니다.
즉, 바디 온로드를 사용하면 속도가 약간 향상되는 경우가 있습니다 (보통 나에게는 매우 드 rare니다).
나는 일반적으로 <head내 페이지 의 >에 다음과 같은 것을 넣도록 프로토 타입을 사용하고 싶습니다 .
document.observe("dom:loaded", function(){
alert('The DOM is loaded!');
});
또는
Event.observe(window, 'load', function(){
alert('Window onload');
});
위의 내가 여기서 배운 트릭 입니다. HTML 외부의 첨부 이벤트 핸들러 개념을 매우 좋아합니다.
(코드의 철자 실수를 수정하도록 편집하십시오.)
'객관적인 질문에 대한 너무 많은 주관적인 답변. "명백하지 않은"JavaScript는 gotos를 사용하지 않는 기존 규칙과 같은 미신입니다. 누군가의 트렌디 한 종교적 신념에 따르지 않고 목표를 안정적으로 달성하는 데 도움이되는 방식으로 코드를 작성하십시오.
다음을 발견 한 사람 :
<body onload="body_onload();">
지나치게 산만 해지는 것은 지나치게 소박하며 우선 순위가 정해져 있지 않습니다.
일반적으로 JavaScript 코드를 별도의 .js 파일에 넣지 만 HTML에서 이벤트 핸들러를 연결하는 것은 번거롭지 않습니다.
window.onload-모든 DOM, JS 파일, 이미지, Iframe, 확장 및 기타가 완전히로드 된 후 호출됩니다. $ (window) .load (function () {})와 같습니다.
body onload=""-DOM이로드되면 호출됩니다. $ (document) .ready (function () {})와 같습니다.
readyvs onload이벤트 에 대한 가장 큰 오해 중 하나로 인용됩니다 . load모든 스크립트, 이미지 및 스타일 시트를 포함하여 전체 문서가로드 된 후 발생합니다. DOMContentLoaded내장 된 DOM 트리 후하지만, 이미지 등 그 전에 화재 DOMContentLoaded에 등가를 가지고 document.ready하지 load.
다른 속성과 마찬가지로 onload를 생각하십시오. 예를 들어 입력 상자에 다음을 넣을 수 있습니다.
<input id="test1" value="something"/>
또는 당신은 전화 할 수 있습니다 :
document.getElementById('test1').value = "somethingelse";
onload 속성은 value 속성과 같은 문자열 대신 값으로 함수를 취하는 것을 제외하고는 동일한 방식으로 작동합니다. window.onload를 호출하면 body 태그의 onload 속성 값이 다시 할당됩니다.
또한, 여기에있는 다른 사람들과 마찬가지로, 일반적으로 스타일과 자바 스크립트를 페이지의 내용과 분리하는 것이 더 깨끗하므로 대부분의 사람들은 window.onload 또는 jQuery의 ready 함수를 사용하는 것이 좋습니다.
<body onload = "">은 window.onload를 대체해야합니다.
<body onload = "">를 사용하면 document.body.onload가 null이거나 정의되지 않았거나 브라우저에 따라 함수가 될 수 있습니다 (그러나 getAttribute ( "onload")는 익명 함수의 본문을 문자열로 가져 오는 데 다소 일관성이 있어야 함) . window.onload를 사용하면 함수를 할당 할 때 window.onload는 여러 브라우저에서 일관되게 함수가됩니다. 그게 중요하다면 window.onload를 사용하십시오.
어쨌든 콘텐츠에서 JS를 분리하는 데 window.onload가 더 좋습니다. window.onload를 사용할 수있을 때 <body onload = "">을 사용할 이유가별로 없습니다.
Opera에서, window.onload 및 <body onload = ""> (그리고 심지어 window.addEventListener ( "load", func, false))의 이벤트 대상은 Safari 및 Firefox에서와 같은 문서 대신 창이됩니다. 그러나 '이것은 브라우저 전체의 창입니다.
이것이 의미하는 바는 중요 할 때 크루 드를 감싸서 일관되게 만들거나 라이브러리를 사용해야한다는 것입니다.
내용, 레이아웃 및 동작을 분리하는 것이 허용되는 표준입니다. 따라서 window.onload ()는 <body onload="">둘 다 동일한 작업을 수행하는 것보다 사용하기에 더 적합합니다 .
죄송 수면의 또 다른 삼년 후 다시 스레드의 환생을 위해, 그러나 아마 나는 마지막의 여지가없는 이익을 찾은 window.onload=fn1;이상을 <body onload="fn1()">. 이것은 JS 모듈 또는 ES 모듈 과 관련이 있습니다. onload핸들러가 "클래식"JS 파일에 있을 때 (즉 <script type="module" … >, 없이 참조 되거나, 어느 쪽이든 가능합니다. onload핸들러가 "모듈"JS 파일에 있을 때 (즉 <script type="module" … >, <body onload="fn1()">"fn1" HTML이 파싱되기 전에 ES 모듈이로드되지 않았기 때문일 수 있습니다. 그러나 그것은 단지 제 추측입니다. 어쨌든, window.onload=fn1;모듈과 완벽하게 작동합니다 ...