ExternalInterface обратный вызов не работает - PullRequest
1 голос
/ 27 октября 2011

Я пытаюсь вызвать функцию в своем ActionScript из моего JavaScript, мне удалось успешно сделать это с другим флэш-файлом, но в текущем случае он по какой-то причине дает сбой.Я использую jQuery SWFEmbed, это мой код JS:

$.ajax({
        url: '<?php echo $html->url(array('controller' => 'voicenotes', 'action' => 'get_url'), true);?>' + '/' + container.children('#VoicenoteVnid').val(),
        dataType: 'json',
        type: 'POST',
        success: function(response) {
          container.children('.voicenote-info').children('.player').addClass('active');
          flashMovie = container.children('.voicenote-info').children('.player');
          alert(flashMovie.html());
          flashMovie.flash({
            swf: '<?php echo $html->url('/files/flash/reproductor_compact.swf',true); ?>',
            width: 240,
            height: 40,
            quality: "high",
            wmode: "transparent",
            allowscriptaccess: "always",
          });
          alert($('.player.active > object')[0].callIt());
        }              
      });

А вот мой код AS, это в моем конструкторе:

public function reproductor()
        {
            ExternalInterface.addCallback("callIt", test);
            ExternalInterface.call("alert", "Que fue?");
            trace(ExternalInterface.available);
        }

И это моя функция:

private function test():String {
            return "this is a test";
        }

ExternalInterface.call работает, и трассировка выводит true, я понятия не имею, что происходит.

PS: Если бы вы также могли сказать мне, как я могу передать параметры вExternalInterface обратный вызов, я был бы признателен.

1 Ответ

2 голосов
/ 27 октября 2011
  1. Возможно, ваш селектор Jquery, чтобы найти ваш SWF-объект, неверен. Почему бы тебе не попробовать сделать это по-другому, просто для отладки?
  2. Возможно, вы вызываете функцию AS3 до полной загрузки SWF. Почему бы вам не попробовать поместить этот вызов функции (callIt) в кнопку, выйти за пределы Ajax и нажать ее после вызова вашего оповещения?

Чтобы получить параметр в функции обратного вызова, просто отправьте его через JS и получите в качестве аргумента в функции обратного вызова. Ex.:

$('.player.active > object')[0].callIt("LOLSOME")

...

ExternalInterface.addCallback("callIt", test);
private function test(arg:String):String {
        return "param received from JS: " + arg;
}
...