2011-05-05 7 views
3

document.createElement()로로드 할 외부 js 파일을 가지고 있으며 변수를 액세스해야합니다. 문제는로드가 언제 끝나는 지 알 수 없다는 것입니다. 내가 jQuery의 문서 준비 기능을 시도했지만 자바 스크립트 파일보다 빨리 배포하는 것 같다. 나는이 생각처럼 변수에 액세스 할 수 있어요 :동적으로로드 된 외부 javascript 파일에서 변수에 액세스

setTimeout("console.log(swifttagdiv.firstChild.firstChild.src)", 5000); 

그러나 이것은 단지 변수가 글로벌 있는지 확인하는 테스트입니다. 어떤 아이디어?

답변

4

페이지에 삽입하는 대신 자바 스크립트를 사용하여 스크립트를 삽입 할 수 있습니다. 이렇게하면로드 된 시점을 제어 할 수 있습니다.

는 여기에 동적 페이지에 코드를 삽입하는 데 사용하는 기능입니다 :

function inject(src, cb, target){ 
     target = target || document.body; 
     var s = document.createElement('SCRIPT'); 
     s.charset = 'UTF-8'; 
     if(typeof cb === 'function'){ 
      s.onload = function(){ 
       cb(s); 
      }; 
      s.onreadystatechange = function() { 
       (/loaded|complete/).test(s.readyState) && cb(s); 
      };      
     } 
     s.src = src; 
     target.appendChild(s); 
     return s; 
    } 

그것을 사용 :

inject('/path/to/file.js', function(script){ 
    //your code here 
}) 
+0

덕분에 교훈이 될 것입니다! 완벽하게 작동 :) – donkapone

2
var checkvarint = setInterval(function(){ 
    if(swifttagdiv.firstChild.firstChild.src){ 
    varLoaded(); clearInterval(checkvarint); 
    } 
},10); 

function varLoaded(){ 
    alert("LOADED!"); 
    alert(swifttagdiv.firstChild.firstChild.src); 
} 
0

Mic's answer이 크다.
여기에만 덜 추상화 같은 일이, 아마도 그것은

var scriptElement = document.createElement('script'); 
scriptElement.type = "text/javascript"; 
scriptElement.src = "https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core-debug.js"; 

function loadHandler() { 
    alert('loaded'); 
} 

// for ie 
scriptElement.onreadystatechange = function() { 
    if(this.readyState == 'complete'){ 
     loadHandler(); 
    } 
} 
// for others 
scriptElement.onload= loadHandler; 

document.getElementsByTagName('head')[0].appendChild(scriptElement); 
관련 문제