2013-01-30 3 views
0

비동기 적으로로드되는 첫 번째 javascript 파일을 만들려고하지만 나중에 개체에서 함수를 호출하는 데 문제가 있습니다. 다음은Async Javascript Uncaught TypeError : Object에 'test'메서드가 없습니다.

(function(){ 
    var example = { 
     test : function() { 
      alert("test function called"); 
     } 
    }; 
    window.example = example; 
})(); 

내가 다음 코드를 사용하여이 파일을 호출하려고 ... 내 예를 들어 자바 스크립트 파일 exampletest.js입니다. 나는이 스크립트를 실행하면

(function(doc, example) { 
      window.example = example; 

      var script = doc.createElement("script"); 
      script.type = "text/javascript"; 
      script.async = true; 
      script.src = "http://www.example.com/exampletest.js"; 

      var scriptTag = doc.getElementsByTagName("script")[0]; 
      scriptTag.parentNode.insertBefore(script, scriptTag); 
    })(document, window.example || []); 

    example.test(); 

나는 오류 "catch되지 않은 형식 오류 : 개체가있는 방법 '테스트'가 없습니다"나는 페이지가로드 된 후 메서드를 호출하면

이의 링크 클릭에 대해 말하기를 테스트 방법이 제대로 호출되고 경고 상자가 나타납니다.

나는 이것을 더 잘 이해하려고 노력하고 있었지만 지금까지 운이 좋지 않았습니다. 나는 더 이상 메소드를 가지지 않고 함수를 호출 할 수있는 방법을 더 잘 이해하려고 노력하고있다. javascript가 호출 자체를 junking하지 않고로드 한 후에 함수 호출을 푸시하는 방법이 있으므로 example.test();

+0

로드 할 파일을 기다립니다

,이

<script src="exampletest.js" async ></script> <script type="text/javascript"> example.test(); </script> 

작동하지 않습니다하지만이 작동합니다. net/WVvV7/ –

답변

-1

기능을 호출하기 전에 존재하는지 확인하십시오.

이 시도 :

if (typeof example.test == function){ 
    example.test(); 
} 

참고 : 자바 스크립트가 비동기 적으로로드 할 때, window.onload이 작동하지 않습니다.

업데이트

async 데의 전체 목적은로드하는 스크립트를 기다리지 않고 페이지를로드하는 것입니다. 둘 다 가질 수는 없습니다. HTTP : // jsfiddle 실행 내가이 오류를 재현 할 수없는

<script src="exampletest.js" ></script> 

<script type="text/javascript"> 
    example.test(); 
</script> 
+0

이 방법이 있습니까? 나는 그것을 가지고 싶어서 example.test()를 호출 할 수있다. 특별히 창문 안에 있지 않아도 돼.로드. 장기간 나는 사용자에게 스크립트를 제공하여 사이트에 잘라 붙여 넣은 다음 아무런 문제없이 메서드를 호출 할 수 있습니다. – user2023918

+0

@ user2023918 내 대답을 업데이트했습니다 ... – ATOzTOA

+0

내 스크립트 파일에서 이런 유형의 것을 검사하여이 문제를 해결할 방법이 있습니까? 내 js를 설치하는 클라이언트가 example.test() 또는 다른 메서드 호출 만 호출하면됩니다. Google 애널리틱스와 같은 복사/붙여 넣기 스크립트 설치가있는 다른 회사와 비슷한 것을 보았지만이 문제를 어떻게 처리하는지 파악할 수 없었습니다. – user2023918

관련 문제