2010-06-15 4 views
0

js가 as3 메서드를 호출 할 수 있도록 ExternalInterface.addCallback을 사용하려고합니다. 다음과 같이 내 코드는 다음과 같습니다 ASExternalInterface.addCallback을 사용할 수 없습니다. js 버튼에서 AS3 함수를 호출하려고 시도합니다.

:

ExternalInterface.addCallback("sendToActionscript", callFromJavaScript); 

function callFromJavaScript():void{ 
circle_mc.gotoAndStop("finish"); 
} 

JS : 그것은 작동하지 않습니다

<button type="button" onclick="callToActionscript()">Switch to square</button> 
<script type="text/javascript"> 
function callToActionscript() { 
flashController = document.getElementById("jstoactest") 
flashController.sendToActionscript(); 
} 
</script> 

. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

플래시 삽입시 AllowScriptAccess가 "always"또는 "sameDomain"으로 설정되어 있는지 확인하고 도움이되는지 확인하십시오. livedocs

1

JS에서 isFlashReady 플래그를 FALSE로 설정했습니다. 그런 다음 SWF가로드 될 때 Event.ADDED_TO_STAGE가 실행 된 후 ExternalInterface.addCallback을 추가하고 isFlashReady 플래그를 TRUE로 전환합니다. 이렇게하면 SWF가 준비되기 전에 호출되지 않습니다. 아래 JS 함수에서 alert()을 던져서 어디서 멈추는 지 확인할 수 있습니다. 희망이 도움이됩니다.

JS : AS

var isFlashReady = false; 
function thisMovie(movieName) 
{ 
    if (navigator.appName.indexOf("Microsoft") != -1) 
    return window[movieName]; 
}else{ 
    return document[movieName]; 
} 
function callToActionScript(value) 
{ 
    if(isFlashReady) 
    { 
      thisMovie("SWFID").sendToActionScript(); 
    } 
} 
function flashReady(value) 
{ 
    isFlashReady = true; 
} 

는 :

if (ExternalInterface.available) { 
     try { 
       ExternalInterface.addCallback("sendToActionScript", callFromJavaScript); 
       flash.external.ExternalInterface.call(flashReady,true); 
      } catch (error:SecurityError) { 
       trace("A SecurityError occurred: " + error.message + "\n"); 
      } catch (error:Error) { 
       trace("An Error occurred: " + error.message + "\n"); 
      } 
} else { 
      trace("External interface is not available for this container."); 
} 
0

은 SWF 파일은 HTML 페이지와 같은 도메인에서 제공되고 있습니까? 도메인이 다른 경우 두 사람이 통신 할 수있게하려면 Security.allowDomain을 사용해야합니다.

또한 플래시를 디버깅하는 가장 쉬운 방법은 JavaScript 통신이 Firefox 용 FireBug를 사용하는 것입니다. (죄송 하나의 링크 만 게시 할 수 있습니다!)

관련 문제