2012-01-16 1 views
0

문제가 있습니다. 동적으로 자바 스크립트 코드를 데이터베이스에서 div에로드하고 있습니다 (실제로 모든 자바 스크립트 코드로 가능). 자바 스크립트 중 하나는 외부 자바 스크립트이고 다른 하나는 외부 자바 스크립트에 대한 호출을 포함하고 있기 때문에 함수를 호출하기 전에 외부 자바 스크립트가로드 될 때까지 기다릴 필요가 있습니다.Javascript - eval 외부 자바 스크립트를로드해야하는 몇 가지 javascript가 대기해야합니다.

제 문제는 함수 이름을 모르거나 수동으로 호출한다는 것입니다. 여기 내 주요 문제는 내가 addJS에 무엇인지 모르겠입니다 예를 들어

<html> 
    <head> 
    </head> 
    <body> 
    <div id='testdiv'> </div> 

    <script type='text/javascript'> 
     var mydiv = document.getElementById('testdiv'); 
     var addJS = '<script type="text/javascript">function testing() { alert("test"); }<\/script><script type="text/javascript">document.write("<script type=\'text/javascript\' src=external.js><\/script\>");<\/script><script type="text/javascript">call_too_external_function();<\/script>'; 

     addJS = addJS.replace(new RegExp('<\/script>', 'g'),""); 
     addJS = addJS.replace(new RegExp('<script type="text/javascript">', 'g'),""); 
     var tmp = document.write; 
     document.write = function() { 
     //catching the document write and evaling the content of the script 
     //but still call_too_external_function is undefined.. 
     var justtest = [].concat.apply([], arguments).join(''); 
     var mysrc = jQuery(justtest).attr('src'); 
     jQuery("head").append(justtest); 
     alert('need to wait!!!'); 
     //IF this alert exists and i wait a few milliseconds to click it call_too_external_function will work 
     //IF i comment the alert out call_too_external_function will be undefined. 
     //IS THERE A WAY TO PAUSE HERE untill this is loaded? 
     } 
     eval(addJS); 
     document.write = tmp; 
    </script> 
</body> 
</html> 

입니다.

이 정보가 도움이 될만큼 충분히 구체적이기를 바랍니다. 정말 감사하겠습니다. 더 많은 정보가 있으면 알려 주시기 바랍니다. 위의 예제에서 jQuery를로드하지 않았으므로 테이블에서 작동하지 않으므로 수행하려는 작업에 대한 예제 만 알 수 있습니다. 내가 시도한 솔루션 중 하나는 setTimeout을 사용하여 각 섹션을 eval'ing하고 각 interation 사이를 기다리는 것입니다. (그것은 또한 실패했다).

UPDATE 확인 그래서 예 2 개 작업 링크를 만든 http://getryk.com/test.php ( http://getryk.com/test1.php (당신이 foo.bar 경고를 얻을 것이다 지난 몇 밀리 초를 기다릴 경우) foo.bar 경고를받지 않습니다)

나는 내가 하나씩 실행하는 타이머를 구축했습니다 다음 배열로 각 스크립트를 가하고있어 해결책을 가지고 UPDATE 2012년 1월 17일

은 (코멘트에 링크를 따라 (넣을 수 없습니다 두 개 이상의 하이퍼 링크;() 스크립트에서 .onload)

감사합니다.

+0

경고와 차이가없는 데모가없는 데모를 추가하겠습니다. (누군가에게 불분명하다면) – kodkod

+0

실제로'addJS' 변수를 어떻게 얻습니까? 스크립트는 특정 순서 (즉, 대기해야하는 스크립트 앞에 필요한 것)로 'addJS'에 있습니까? 아니면 보장되지 않습니까? – bububaba

+0

나는 클라이언트에서 addJS를 얻고있다. (나는 무엇이 들어올 것인지는 모른다.) 나는 순서를 모르지만 그것이 비동기 일 것이라고 가정한다. 내 목표는 정말 몇 밀리 세컨드 또는 두 번째 때 내가 외부 JS 잡을 기다리는 것입니다 (그래서 브라우저에 시간을 줄 것입니다 짐을 thats 짐작한다) – kodkod

답변

0

아약스 호출이없는 경우 왜 document.ready를 기다리지 않는 것이 좋을까요? 즉, 페이지가 완전히로드되고 모든 것이 DOM 객체 내에 있음을 의미합니다.

관련 문제