2010-01-27 7 views
62

.js 파일을 다른 .js 파일에 포함 할 수 있는지 알고 싶습니다..js 파일에 .js 파일 포함

나를 원한 이유는 클라이언트가 최소한으로 유지하는 것입니다. 몇 가지 .js 파일이 이미 클라이언트에서 필요한 기능이 작성된 있습니다. 클라이언트는 .js 파일 (내 .js 파일)로 관리하는 html 파일을 가지고 있습니다.

내가 두 번 일을하지 않도록 다른 .js 파일을 포함하는 .js 파일을 작성하는 방법을 알아 내기 위해, 그것의 모든 기능을 새로운 .js 파일을 다시 작성하거나 수

.

+0

방금 ​​Grunt 플러그인을 만들었습니다. 주 응용 프로그램에 사용되는 기능 만 포함합니다. https://github.com/mr-moon/grunt-contrib-resolve –

답변

36

jQuery를의 기능을 기반으로 당신이 첨부하는 스크립트지만, 그것을 테스트 해주세요, 나는 그것이 크로스 브라우저에서 작동하는지 확신하지 못합니다.

x.onload=callback_function; 
+5

그대로 비동기식으로, 나는 그들이 당신이 기대하는 순서대로 도착할 지 확신하지 못한다. – Mic

3

HTML 파일에서 JavaScript 참조를 줄이는 문제를 해결하는 일반적인 방법은 Sprockets과 같은 연결 도구를 사용하는 것입니다.이 도구는 JavaScript 원본 파일을 사전 처리하고 연결합니다.

HTML 파일에서 참조 수를 줄이는 것 외에도 서버에 대한 히트 수를 줄입니다.

그런 다음 결과 연결을 jsmin과 같은 축소 도구를 통해 실행하여 축소 할 수 있습니다.

11

브라우저로드 시간에 가장 적합한 솔루션은 서버 쪽 스크립트를 사용하여 모두 하나의 큰 .js 파일로 결합하는 것입니다. 최종 버전을 gzip/minify해야합니다. 단일 요청 - 좋고 간결합니다.

DOM을 사용하여 <script> 태그를 만들고 src 속성을 <head>에 추가 할 수 있습니다. 해당 기능이로드 될 때까지 기다릴 필요가 있으면 해당 스크립트 태그의 load 이벤트에서 나머지 자바 스크립트 파일을 호출 할 수 있습니다.

이 기능은 또한 각 onload 이벤트를 사용할 수 있습니다 기본적으로 내가 <head>

var x = document.createElement('script'); 
x.src = 'http://example.com/test.js'; 
document.getElementsByTagName("head")[0].appendChild(x); 

에 그, 같이 할 새로운 요소를 작성하고 첨부 $.getScript()

function loadScript(src, f) { 
    var head = document.getElementsByTagName("head")[0]; 
    var script = document.createElement("script"); 
    script.src = src; 
    var done = false; 
    script.onload = script.onreadystatechange = function() { 
    // attach to both events for cross browser finish detection: 
    if (!done && (!this.readyState || 
     this.readyState == "loaded" || this.readyState == "complete")) { 
     done = true; 
     if (typeof f == 'function') f(); 
     // cleans up a little memory: 
     script.onload = script.onreadystatechange = null; 
     head.removeChild(script); 
    } 
    }; 
    head.appendChild(script); 
} 

// example: 
loadScript('/some-other-script.js', function() { 
    alert('finished loading'); 
    finishSetup(); 
}); 
4

직접적인 방법은 없습니다.

필요에 따라 스크립트를로드 할 수 있습니다. (Ignacio가 언급 한 것과 비슷한 것을 다시 사용하지만, 훨씬 더 깨끗합니다.)

확인이 일을 여러 가지 방법이 링크 아웃 : http://ajaxpatterns.org/On-Demand_Javascript

내 좋아하는 (적용되지 항상)이다

<script src="dojo.js" type="text/javascript"> 
dojo.require("dojo.aDojoPackage"); 

구글의 폐쇄도 유사한 기능을 제공합니다.

0

내가 document.writeln 내가 DOM 생성이 IE6에서 안정적으로 작동하는 (그리고 TBH가에 많은 노력을 충분히 관심이 없었어요 얻을 수 있기 때문에 IE < 7에 대한 <script> 태그를 보내고 다시 가을하지만 내가 gnarf의 방법 @ 사용 그것). 내 코드의 핵심은 다음과 같습니다

horus.script.loaded() 노트 자바 스크립트 파일을로드하고, 보류중인 지껄 루틴을 호출하는 것을
if (horus.script.broken) { 
    document.writeln('<script type="text/javascript" src="'+script+'"></script>'); 
    horus.script.loaded(script); 
    } else { 
    var s=document.createElement('script'); 
    s.type='text/javascript'; 
    s.src=script; 
    s.async=true; 

    if (horus.brokenDOM) 
     s.onreadystatechange= 
     function() { 
      if (this.readyState=='loaded' || this.readyState=='complete') 
      horus.script.loaded(script); 

     }; 

    else 
     s.onload=function() { horus.script.loaded(script) }; 

    document.head.appendChild(s); 
    } 

가 (자동 로더 코드로 저장).