ExternalInterface.addCallback не работает правильно - PullRequest
0 голосов
/ 01 октября 2010

У меня есть код 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 ]

1 голос
/ 02 октября 2010

Спасибо !!! Я искал ответ два дня! Это мой новый код:

<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>
1 голос
/ 02 октября 2010

Похоже, что проблема в HTML-коде для встроенной Flash-памяти. Браузеры Mozilla используют тег embed, но у вас снова есть object. Попробуйте использовать нечто подобное в вашем объектном узле:

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