Javascript jQuery swfobject AS3外部接口不工作

Javascript jQuery swfobject AS3外部接口不工作,javascript,jquery,actionscript-3,swfobject,externalinterface,Javascript,Jquery,Actionscript 3,Swfobject,Externalinterface,从标题可以看出,我在使用AS3外部接口和jQuery/swfobject时遇到了一些问题 动作脚本: if (ExternalInterface.available) { ExternalInterface.call('init'); ExternalInterface.addCallback('testFunc', returnFunc) } function returnFunc():void { ExternalInterface.call('alertFunc'

从标题可以看出,我在使用AS3外部接口和jQuery/swfobject时遇到了一些问题

动作脚本:

if (ExternalInterface.available) {
    ExternalInterface.call('init');
    ExternalInterface.addCallback('testFunc', returnFunc)
}

function returnFunc():void {
    ExternalInterface.call('alertFunc');
}
jQuery:

function init() {
    alert('init');
    $('#swf_object').testFunc();
}

function alertFunc() {
    alert('finished');
}
显然,这意味着该对象具有id“swf_object”

我还尝试通过以下方式获取对象:

document.getElementById('swf_object')
document.getElementById('swf_object')[0]
$('#swf_object')[0]
无济于事


它会发出第一个警报(“init”),但不会发出最后一个警报。我完全不知所措,希望有人能指出我的错误!(在某个地方肯定会有一个非常明显的问题)

问题是,您调用的是JavaScript
init()
,它在testFunc可用之前调用Flash
testFunc()
(只有在调用
init()
完成之后才会发生)

要解决此问题,只需将这两行替换为:

ExternalInterface.addCallback('testFunc', returnFunc);    // Needs to be available before it's used
ExternalInterface.call('init');
至于在JavaScript中获取Flash对象,您可以直接使用
document.getElementById('swf_object')
,但也可以使用jQuery:

var swf = $('#swf_object').get(0);    // Get the actual object without the jQuery wrapper

我就知道事情会这么简单!我对ActionScript还很陌生,但那是显而易见的!我本以为ActionScript会一直通读代码(比如JavaScript),但事实证明它会等待函数(比如PHP)。我记得在学习JavaScript时遇到了相反的问题,希望它等待函数执行@Andrew:AS3和JS(在浏览器中)实际上在这方面非常相似——它们都托管在单线程环境中,因此大量使用异步函数。但是,无论何时调用一个函数,它都是一个同步操作(在两种语言中(以及我所能想到的所有语言中)。协调这两个概念的诀窍在于,启动异步操作的函数将运行synchronousy——它只是不同时执行整个操作(仅第一位)。