Flash AS3 ExternalInterface вызов функции внутри документа jQuery готов - PullRequest
1 голос
/ 02 марта 2010

С помощью кнопки во Flash я просто хочу вызвать функцию, написанную на jQuery.
Когда я помещаю функцию вне $ (документа) jQuery. Уже все работает нормально:
* Кстати, я использую 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 Ответ

1 голос
/ 02 марта 2010

В тот момент, когда Flash выполняет вызов jsFunction, он не определен. У вас есть состояние гонки, когда $(document).ready запускается после выполнения вызова ExternalInterface, поэтому все, что определено в $(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();
});
...