2011-03-17 3 views
1

JS에서 AS 함수를 호출하려고합니다.as3에 대한 ExternalInterface.addCallback이 작동하지 않습니다.

나는 다음과 같은 액션 스크립트 3 코드를 가지고 : 나는 자바 스크립트에서 함수는 PlaySound()를 호출 할 필요가

package { 
    import flash.display.*; 
    import flash.events.*; 
    import flash.system.*; 
    import flash.external.ExternalInterface; 
    public class Main extends Sprite { 
     public function Main() 
     { 
      ExternalInterface.addCallback("PlaySound", PlaySound); 
     } 
     public function PlaySound():void 
     { 

     } 
    } 
} 

합니다.

function thisMovie(movieName) { 
    if (navigator.appName.indexOf("Microsoft") != -1) { 
     return window[movieName]; 
    } else { 
     return document[movieName]; 
    } 
} 

function m() 
{ 
    var obj=thisMovie("Main"); 
    obj.PlaySound(); 
} 

을하지만, OBJ는 (obj가 null이 아닌) 어떤 방법는 PlaySound()이 없다 : 나는 다음과 같은 방법으로 작업을 수행하려고합니다.

무엇이 잘못 되었나요?

+0

그러나 obj에는 PlaySound() 메서드가 없습니다 (obj가 null이 아님). - 무슨 뜻이야? as3 PlaySound 메서드에서 무언가를 추적하려고 했습니까? –

+0

JavaScript 객체 obj에 PlaySound 메소드가 없습니다. 하지만 obj가 null이 아니므로 thisMovie 함수가 정확합니다. 해결책을 찾았습니다. 다음 답을보십시오. 고맙습니다. –

답변

3

나는 이것을 사용하여 영화를 찾는다. 더 안정적인 것 같다 :

function thisMovie(movieName) { 
    var movie; 
    try 
    { 
     movie = document[movieName]; 
     movie = (movie == null) ? window[movieName] : movie;   
    } 
    catch (e) 
    { 
     return null; 
    } 
    return movie; 
} 

은 또한 로컬 파일 시스템에서 실행하는 경우 ExternalInterface를 제대로 작동하지 않는 것으로 나타났습니다. 웹 서버에서 실행 해 보셨습니까?

경쟁 조건이 발생했을 가능성이 있습니다 ... 콜백으로 등록되기 전에 PlaySound를 호출하려고했을 가능성이 있습니다. 전화하기 전에 잠시 기다리면 어떻게됩니까?

+0

예, 작동합니다. 로컬 파일 시스템이 아닌 웹 서버에서이 파일을 실행하려고했습니다. 고맙습니다. –

0

JS에서 호출하려고하면 SWF 파일이로드되지 않는다고 생각합니다.

관련 문제