2011-09-19 17 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> 

、Flashオブジェクトを取得し、それにtest()メソッドを呼び出ししようとしているコードが起こっていますサードパーティコンポーネント(DevExpress ASPxHiddenField)からのA​​JAXコールバックでFlashムービーがロードされた後、このコールバックは、ユーザの入力によってトリガーされます。

<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> 

Internet Explorerは、「オブジェクトはこのプロパティまたはメソッドをサポートしていない」、その関数の最後の行について不平を言います。

ありがとうございます!

+0

ためである第二のオブジェクトembedタグのidパラメータが欠落しているように見えます。 –

+0

これらの引用符は、EndCallback属性の二重引用符の内部にあるため、エスケープする必要があると考えています。試してみると、Visual Studioデザイナーと混乱し、IISがパーサーエラーを報告する原因となりました。 –

+0

二重引用符または二重引用符のいずれかを試してください。 –

答えて

0

これは、Capabilities.isDebugger()が原因であることが判明しました。 ExternalInterface.addCallback()スローので、私はそのチェックを追加

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

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

:私は(と私はそれは問題でなければならない方法はありませんと思ったので)簡潔にするために、私のオリジナルのポストからこれを省略していたが、私のActionScriptクラスでコンストラクタは、実際にこのようになります"エラー:エラー#2067:ExternalInterfaceはこのコンテナで利用できません.Internet Explorer ActiveX、Firefox、Mozilla 1.7.5以降、またはNPRuntimeをサポートする他のブラウザが必要です。 Flashデバッガで実行されたとき。

明らかに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

関連する問題