여러 개의 <script>
태그를 여러 개 만들면로드 순서와 빌드 방식에 따라 태그가 생성되는 즉시 처리되기 시작합니다. 짐을 실은. 그래서
, 당신은 같은 하나 개의 로컬 파일과 CDN에 하나 개의 파일을 포함하는 경우 :
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script type="text/javascript" src="/js/my_script.js"></script>
을 당신은 CDN 파일 호스팅 파일보다 배달 훨씬 빠른 종종 것을 고려해야 . 위의 경우에는 스크립트가 적용되기 전에 jQuery
이 페이지에로드되어 있기 때문에 좋은 방법 일 수 있습니다. DOM에있는 특정 요소에 의존하는 다른 타사 스크립트를로드하는 경우 귀하의 스크립트 작성에 대한 책임은 귀하의 스크립트가 제 시간에 생성하지 못할 수 있습니다.
이 시나리오를 상상해 :
<script type="text/javascript" src="https://someurl/somelib.js">
// This script parses the DOM and applies alterations to certain items
</script>
<script type="text/javascript" src="/js/my_script.js">
// This script creates the DOM elements the other script is supposed to alter
</script>
귀하의 페이지에만 작동합니다 경우 로컬 파일, /js/my_script.js
, 처음로드 - 다른 파일 전용 CDN에서 제공되고 있기 때문에 않을 수 있습니다.두 파일은 같은 로컬로 제공하는 경우
이 더 악화입니다 :이 경우
<script type="text/javascript" src="/js/my_relied_upon_script.js"></script>
<script type="text/javascript" src="/js/my_reliant_script.js"></script>
, 모든 로컬 웹 서버가 무슨 결정하기 위해 HTTP 요청을 처리하기 위해 발생 방법에 따라 달라집니다 어떤 순서로.
그래서 - 솔루션에게 :
1) 스크립트가 모든 발사 할 수있는 document
의 onready
이벤트를 기다려야합니다. 이 이벤트는 문서가 완전히로드 된 후에 만 발생하므로 (스크립트, 이미지 등 요소를 완전히로드하는 데 필요한 다른 HTTP 요청을 포함하여) 전체 DOM이 완료 될 때까지 스크립트가 최소한 기다릴 수 있습니다. 짐을 실은.
2) 트리거 이벤트를 기다리는 하위 스크립트를 만듭니다. 같은 인라인의 CSS로 (위의 변환이 매우 끔찍한, 그리고 무언가가 당신이 원하는 것 명심 -
// Script #1
$(document).bind('ready', function() {
$('#NeedsBackground').css({ background: 'url(/gfx/bg.png)' });
var $wrapper = $('<div />').addClass('wrapper');
$('#NeedsWrapper').wrap($wrapper);
// Here's the magic that enforces loading.
$(document).trigger('Script1Finished');
});
// Script #2
$(document).bind('Script1Finished', function() {
$('.wrapper').css({ border: '1px solid #000' });
});
지금 : jQuery로
, 예는 다음과 같은 것을 수 있습니다 그리고 일반적으로) - 그러나 그들은 예를 든다. Script #2
은 실행 전에 .wrapper
요소가 있어야하므로 Script #1
이 발생한 후에 발생해야합니다.
이 경우 문서의 맞춤 이벤트를 trigger
처리하여 처리 할 수 있습니다.이 이벤트는 응답 할 수 있으며 DOM이 올바른 상태가 된 후에 만 해당 이벤트가 실행됩니다.
안녕하세요, 유익한 답변에 감사드립니다. JS 파일의 순서는 다음과 같습니다. – user1548054
안녕하세요, 유익한 답변 주셔서 감사합니다. 따라서 JS 파일의 순서는 JS_Which_adds_ids (로드시 호출 됨) Js_which_parses_ids (onload라고 함)입니다. 주문을 강제하는 어떤 방법이 있습니까, 아니면 순전히 요청을 처리하는 웹 브라우저에 있습니까? 불행히도 JQuery를 사용하는 것은이 프로젝트의 옵션이 아닙니다. – user1548054
첫 번째 스크립트에서 두 번째 스크립트를로드 할 수 있다고 가정합니다. http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml에서 예제를 찾을 수 있습니다. 'setTimeout' 루프를 사용하여 ID가 생성되었는지 여부를 확인할 수도 있습니다. 두 스크립트를 모두 제어하는 경우 최상의 솔루션은 하나의 작은 파일로 올바른 순서로 매시/축소하는 것입니다. 이것은 가장 쉽고 안전합니다. –