2011-09-19 5 views
1

SWFObject를 사용하여 ASPX 페이지에 포함 된 Flash 무비에 메서드를 호출하기 위해 Javascript를 사용하고 있습니다. Firefox에서 제대로 작동하지만 Internet Explorer 7 및 8 (지금까지)은 swfobject.getObjectById()에 의해 반환 된 객체가 "이 속성 또는 메서드를 지원하지 않습니다"라고 주장합니다. 이 사이트와 다른 사이트에서 비슷한 게시물을 찾았지만 IE에서이 문제가 해결되지 않았습니다.Internet Explorer가 ASPX에서 Flash ExternalInterface 메서드를 보지 못하는 이유는 무엇입니까?

은 ActionScript 3.0 클래스 :

public class Player extends MovieClip { 
    public function Player() 
    { 
     Security.allowDomain("http://localhost"); 
     ExternalInterface.addCallback("test", test); 
    } 

    public function test():void 
    { 
     debugBox.appendText("test() called successfully\n"); 
    } 
} 

ASPX 마크 업 :

또한 ASPX 마크 업에 따라
<head runat="server"> 
    <script type="text/javascript" src="Scripts/swfobject.js"></script> 
    <script type="text/javascript"> 
    swfobject.registerObject("myPlayer", "9.0.0", "scripts/expressInstall.swf"); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div class="movie"> 
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="640" id="myPlayer"> 
     <param name="movie" value="Player.swf" /> 
     <param name="allowscriptaccess" value="always" /> 
     <!--[if !IE]>--> 
     <object type="application/x-shockwave-flash" data="Player.swf" width="640" height="640"> 
      <!--<![endif]--> 
      <a href="http://www.adobe.com/go/getflashplayer"> 
       <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" 
        alt="Get Adobe Flash player" /> 
      </a> 
      <!--[if !IE]>--> 
     </object> 
     <!--<![endif]--> 
    </object> 
</div> 

, 플래시 객체를 얻고 그것에 test() 메소드를 호출하려고 코드가 일어나고있다 타사 구성 요소 (DevExpress ASPxHiddenField)의 AJAX 콜백 플래시 동영상이로드 된 후이 콜백은 사용자 입력에 의해 트리거됩니다 :

는 Internet Explorer가 그 함수의 마지막 줄에 대해 불평
<dx:ASPxHiddenField ID="filenameHiddenField" runat="server" OnCustomCallback="filenameHiddenField_CustomCallback" 
     SyncWithServer="False"> 
     <ClientSideEvents EndCallback="function(s, e) {   
     var playerObject = swfobject.getObjectById(&quot;myPlayer&quot;); 
    playerObject.test(); 
}" /> 
</dx:ASPxHiddenField> 

는 "개체가이 속성 또는 메서드를 지원하지 않습니다."

감사합니다.

+0

위한 2 개체 embed 태그의 id 매개 변수를 누락 것 같습니다. –

+0

EndCallback 속성에서 큰 따옴표 안에 있기 때문에이 따옴표를 이스케이프해야한다고 생각합니다. Visual Studio 디자이너와 혼동하여 IIS에서 파서 오류를보고했습니다. –

+0

큰 따옴표 나 큰 따옴표를 사용해보십시오. –

답변

0

Capabilities.isDebugger()가 원인입니다. 나는 간결 내 원래의 게시물에서이 생략했다 (내가 생각했기 때문에 거기에 중요합니다 방법은 없다),하지만 내 ActionScript 클래스의 생성자가 실제로 다음과 같습니다 : 나는 검사가 ExternalInterface.addCallback()가 발생하기 때문이라고 덧붙였다

public function Player() 
{ 
    Security.allowDomain("localhost"); 

    if (!Capabilities.isDebugger) 
    { 
     ExternalInterface.addCallback("test", test); 
    } 
} 

"오류 : 오류 # 2067 :이 컨테이너에서 ExternalInterface를 사용할 수 없습니다 .Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 이상 또는 NPRuntime을 지원하는 다른 브라우저가 ExternalInterface에 필요합니다." 플래시 디버거에서 실행될 때.

분명히 Internet Explorer의 Flash Player는 디버그 버전입니다. ExternalInterface.addCallback()은 절대 호출되지 않았습니다.

0

SWFObject's FAQ #7을 참조하십시오. 특히이 문제를 해결합니다.

+0

유망 해 보였지만 불행히도 작동하지 않았습니다.Firefox는 여전히 정상적으로 작동하지만 Internet Explorer는 여전히 동일한 오류가 발생합니다. –

0

ExternalInterface.addCallback은 DOMContentLoaded를 호출해야합니다.

public function Player() 
{ 
    ... 

    setTimeout(regCallBack, 10); 
} 

private function regCallBack():void 
{ 
    ExternalInterface.call("test", test); 
} 
1

당신이 실제 따옴표 문자로 URL 인코딩 따옴표 문자를 교체하려고 IE

관련 문제