ExternalInterface.addCallback для as3 не работает - PullRequest
1 голос
/ 17 марта 2011

Я хочу вызвать функцию AS из JS.

У меня есть следующий код ActionScript 3:

package  {
    import flash.display.*;
    import flash.events.*;
    import flash.system.*;
    import flash.external.ExternalInterface;
    public class Main extends Sprite {
        public function Main() 
        {
            ExternalInterface.addCallback("PlaySound", PlaySound);
        }
        public function PlaySound():void
        {

        }
    }
}

Мне нужно вызвать функцию PlaySound () из JavaScript.Я пытаюсь сделать это следующим образом:

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

function m()
{
  var obj=thisMovie("Main");
  obj.PlaySound();
}

Но у obj нет метода PlaySound () (obj не нуль).

Что не так?

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Я использую это, чтобы найти фильм.Кажется, это более надежно:

function thisMovie(movieName) {
    var movie;
    try
    {
        movie = document[movieName];
        movie = (movie == null) ? window[movieName] : movie;        
    }
    catch (e)
    {
        return null;
    }
    return movie;
}

Я также обнаружил, что ExternalInterface не работает должным образом при запуске из локальной файловой системы.Вы пытались запустить это с веб-сервера?

Возможно также, что вы видите состояние гонки ... возможно, вы пытаетесь вызвать PlaySound до того, как он будет зарегистрирован как обратный вызов.Что произойдет, если вы немного подождете, прежде чем позвонить?

0 голосов
/ 17 марта 2011

Мне кажется, проблема в том, что SWF-файл еще не загружен, когда вы пытаетесь вызвать его из JS.

...