Я думаю, вы неправильно понимаете документацию. callback
в данном случае это просто ссылка на функцию внутри Flash, а не обратный вызов чего-то, что вы вызываете.
Обычно вы используете .call()
для вызова функции JS из AS; и вы используете .addCallback()
, чтобы сообщить Flash Player, какая функция AS должна вызываться на основе имени.
В вашем примере theFunction
получит один параметр как 'foo', то есть имя, которое ссылается на вашу анонимную функцию AS. Не уверен, почему вы хотите передать такую функцию, но если вам нужно, вы можете просто вызвать ее из JavaScript с помощью
function theFunction(callback) {
// .. do something...
swfObject[callback]();
}
Теперь, если у вас нет контроля над стороной JS / HTML, я не уверен, что вы сможете это сделать. В любом случае, я не уверен, зачем вам это нужно - вызовы JS являются синхронными, как если бы они выполнялись в одном потоке, то есть Flash Player выполнит код JS и только затем вернется к Flash Player ... у вас нет ждать исполнения или чего-то еще.
Кроме того, если вам действительно нужно управлять страницей, не касаясь стороны JS / HTML, помните, что вы можете вводить целые фрагменты кода JS с помощью .call
- это не обязательно должно быть простым вызов функции. Вы можете создавать все свои функции изнутри SWF. Например,
var js:XML = <script><![CDATA[
// Javascript code...
]]></script>;
ExternalInterface.call(js);
Или, если вам нужны данные return , вам также не нужен обратный вызов - просто выполните простой вызов, как в
// JS
function isNumberZero(__num) {
return __num == 0;
}
// AS
trace ("Is number zero = " + ExternalInterface.call("isNumberZero", 10));
Не уверен, поможет ли это вообще. В противном случае было бы хорошо получить больше информации о том, что именно вы пытаетесь сделать.