Flash AS3 ExternalInterface调用jQuery文件中的函数准备好了

时间:2010-03-02 00:39:04

标签: jquery flash actionscript-3 externalinterface document-ready

从Flash中的一个按钮我只想调用一个用jQuery编写的函数。
当我把这个函数放在jQuery的$(document).ready之外时它工作正常:
*顺便说一句,我使用SWFObject嵌入Flash。

AS3:

import flash.external.ExternalInterface;
function test_fnc(event:Event):void {
    ExternalInterface.call("jsFunction", "hello world");
}
test_mc.addEventListener("click", test_fnc);

JS:

<script type="text/javascript">     
    function jsFunction(words) {
        alert(words); // "hello world";
    }
    $(document).ready(function() {
        // not from here
    });
</script>

1 个答案:

答案 0 :(得分:1)

当Flash调用jsFunction时,它未定义。在进行ExternalInterface调用之后,您有$(document).ready触发的竞争条件,因此$(document).ready中定义的任何内容都不会执行,因此在Flash进行调用时不可用。

回应你的评论:

您需要准备好两个Flash,并且文档准备就绪。我不确定初始化的顺序是否有保证,所以我建议你从Flash调用一个已知的函数来告诉JS它已经准备好了。也许是这样的:

var waitingForItems=2;
function itemReady()
{
    //called from both Flash and $(document).ready
    --waitingForItems;
    if(waitingForItems==0)
    {
        //create your array
        //send to Flash by calling Flash rather having Flash call JS
    }
}
$(document).ready(function(){
    itemReady();
});