ExternalInterface.addCallback不能正常工作

时间:2010-10-01 18:52:55

标签: javascript flex flash actionscript-3 actionscript

我有js代码:

function onFlashReady() {        
    sendToAS("sit");
}

function callJS(value) {        
    onFlashReady();
    return "Hi Flash.";
}

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

HTML:

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="850" Height="588" id="FlashID" tabindex="0">
      <param name="movie" value="BusFlex/BusProducts.swf" />
      <param name="quality" value="high" />
      <param name="wmode" value="opaque" />
      <param name="allowScriptAccess" value="always" />
      <param name="swfversion" value="6.0.65.0" />
      <param name="expressinstall" value="Scripts/expressInstall.swf" />
      <!--[if !IE]>-->
         <object type="application/x-shockwave-flash" data="BusFlex/BusProducts.swf" width="850" height="588">
      <!--<![endif]-->
      <param name="quality" value="high" />
      <param name="wmode" value="opaque" />
      <param name="allowScriptAccess" value="always" />
      <param name="swfversion" value="6.0.65.0" />
      <param name="expressinstall" value="Scripts/expressInstall.swf" />
      <div>
         <h4>Установите или включите Adobe Flash Player.</h4>
         <p><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" width="112" height="33" /></a></p>
      </div>
      <!--[if !IE]>-->
         </object>
      <!--<![endif]-->
      </object>
      <script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
      <script type="text/javascript">
      <!-- swfobject.registerObject("FlashID"); //-->
      </script>
      </div>

和动作代码:

protected function application1_creationCompleteHandler(event:FlexEvent):void
{
     flash.system.Security.allowDomain("http://mysite.ru");
     flash.system.Security.allowDomain("http://localhost");
     if(ExternalInterface.available)  
     {
          ExternalInterface.addCallback("callAS", fromJS);
     }
     ExternalInterface.call("callJS", "Hello JS!");
}
public function fromJS(str:String):void 
{
   ...
}

但它仅适用于IE。在FF中,这不起作用。请帮帮我。

2 个答案:

答案 0 :(得分:1)

看起来问题出在你的flash嵌入式html中,Mozilla浏览器依赖于embed标记但你再次拥有object。尝试在对象节点中使用类似的东西:

<embed type="application/x-shockwave-flash" data="BusFlex/BusProducts.swf" width="850" height="588" allowscriptaccess="always">
</embed>

答案 1 :(得分:1)

谢谢!我正在寻找两天的答案! 这是我的新代码:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="850" height="588" id="FlashID" tabindex="0">
    <param name="movie" value="BusFlex/BusProducts.swf" />
    <param name="quality" value="high" />
    <param name="wmode" value="opaque" />
    <param name="allowScriptAccess" value="always" />
    <param name="swfversion" value="6.0.65.0" />
    <param name="expressinstall" value="Scripts/expressInstall.swf" />

    <!--[if !IE]>-->
    <embed src="BusFlex/BusProducts.swf" type="application/x-shockwave-flash" data="BusFlex/BusProducts.swf" width="850" height="588" allowscriptaccess="always" name="FlashID">

      <param name="quality" value="high" />
      <param name="wmode" value="opaque" />
      <param name="allowScriptAccess" value="always" />
      <param name="swfversion" value="6.0.65.0" />
      <param name="expressinstall" value="Scripts/expressInstall.swf" />
      <!--<![endif]-->

      <!--[if IE]>
      <div>
        <h4>YCTAHOBUTE Adobe Flash Player.</h4>
        <p><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" width="112" height="33" /></a></p>
      </div>
      <![endif]-->
     <!--[if !IE]>-->
     </embed>
    <!--<![endif]-->
  </object>