Когда Javascript может начать вызывать Actionscript? - PullRequest
2 голосов
/ 23 января 2011

Вопрос

Есть ли незапрашивающий способ для Javascript командовать Flash сразу, когда его внешний интерфейс готов?

Фон

В Actionscript я зарегистрировал функцию для вызова Javascript:

ExternalInterface.addCallback('doStuff", this.doStuff);

Я использую SWFObject для встраивания Flash на мою страницу:

swfobject.embedSWF(
    'flash/player.swf',
    'flashPlayer',
    '100%',
    '100%',
    '9',
    'expressInstallSwfTODO.swf',
    {},
    {allowfullscreen: true},
    {},
    function(status) {
        if (!status.success) {
            alert('Failed to embed Flash player');
        } else {
            $('flashPlayer').doStuff();
        }
    }.bind(this)
);

SWFObject позволяет запускать код, когда Flash успешно внедрен через обратный вызов.Я пытаюсь запустить $ ('flashPlayer'). DoStuff в этом обратном вызове, но он утверждает, что он не определен.Похоже, что Flash требуется некоторое время для загрузки внешнего интерфейса.Поэтому я использовал хак с опросом, чтобы узнать, когда внешний интерфейс будет готов:

new PeriodicalExecutuer(
 function(poller) {
  if ($('flashPlayer').doStuff) {
   $('flashPlayer').doStuff();
   poller.stop()
  }
 },
 0.2
);

Этот опросник не идеален.Визуально ощутимая задержка при выполнении doStuff, и это делает мою общую структуру кода неясной.

Ответы [ 2 ]

4 голосов
/ 23 января 2011

В Javascript:

function flashIsReady()
{
    $('flashPlayer').doStuff();
}

В Actionscript:

if (ExternalInterface.available) {
    ExternalInterface.addCallback('doStuff', this.doStuff);
    ExternalInterface.call("flashIsReady");
}
0 голосов
/ 09 октября 2015

Я сделал решение опроса.В ActionScript у меня есть такая функция:

private function extIsInterfaceReady():Boolean {
    return ExternalInterface.available;
}

А в JavaScript, после события onFlashReady, которое я также закодировал в инициализации, я запускаю интервал, подобный этому:

...