ExternalInterface回调不起作用

时间:2011-10-26 22:19:16

标签: javascript jquery flash actionscript-3 externalinterface

我正在尝试从我的JavaScript中调用我的ActionScript中的函数,我已成功地使用另一个Flash文件执行此操作,但在当前版本中,由于某种原因它失败了。我正在使用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,我不知道发生了什么。

P.S:如果你也可以告诉我如何将参数传递给ExternalInterface回调,我会很感激。

1 个答案:

答案 0 :(得分:2)

  1. 也许你的Jquery选择器找到你的SWF对象是错误的。你为什么不试着这样做 另一种方式,只是为了调试?
  2. 在SWF完全加载之前,您可能正在调用AS3函数。为什么不尝试将该函数调用(callIt)放入一个按钮,在Ajax外部,并在调用警报后按下它?

  3. 要在回调函数中接收一个参数,只需通过JS发送它,然后在回调函数中将其作为参数接收。 例:

    $('.player.active > object')[0].callIt("LOLSOME")
    
    ...
    
    ExternalInterface.addCallback("callIt", test);
    private function test(arg:String):String {
            return "param received from JS: " + arg;
    }