Проблема со ссылками при добавлении обратных вызовов к внешнему интерфейсу во Flash/ActionScript3
У меня есть метод: myMethod() {}
что я хочу сделать доступным для JavaScript. Я провел небольшое исследование и выяснил, что вам нужно добавить обратный вызов в ExernalInterface, так что вот что я сделал:
ExternalInterface.addCallback("invokeMyMethod", myMethod);
Теперь, когда я загружаю свою веб-страницу с флэш-памятью, я получаю сообщение об ошибке:
ReferenceError: Ошибка № 1065: переменная myMethod не определена. в Main$cinit() в глобальном $ init ()
myMethod содержится в классе Main... вот как выглядит Main.as:
package {
import flash.external.ExternalInterface;
import flash.events.Event;
//import a bunch of other things...
if( ExternalInterface.available ) {
ExternalInterface.addCallback("invokeMyMethod", myMethod);
}
public class Main extends Sprite {
//A bunch of other methods...
public function myMethod(str:String):void {
//Do something here
}
}
}
Я понятия не имею, как сделать ExernalInterface.addCallback
пойми это myMethod
существует... У кого-нибудь есть идеи?
Спасибо,
Matt
2 ответа
Ответ Джейкоба выше работает просто отлично. Но он создал другие ошибки, потому что теперь пытался получить доступ к нестатическим переменным из статического метода... Итак, я попробовал это:
Я перенес:
if( ExternalInterface.available ) {
ExternalInterface.addCallback("invokeMyMethod", myMethod);
}
в мой основной класс, вот так:
package {
import flash.external.ExternalInterface;
import flash.events.Event;
//import a bunch of other things...
public class Main extends Sprite {
//A bunch of other methods...
if( ExternalInterface.available ) {
ExternalInterface.addCallback("invokeMyMethod", myMethod);
}
public function myMethod(str:String):void {
//Do something here
}
}
}
И это работало нормально
Ваша функция myMethod находится внутри класса Main, но ваша ссылка на нее (в операторе if) - нет. Если вы сделаете myMethod статическим, то ваш оператор addCallback может выглядеть так:
ExternalInterface.addCallback("invokeMyMethod", Main.myMethod);
Или, если у вас есть экземпляр Main, вы можете написать:
ExternalInterface.addCallback("invokeMyMethod", myObj.myMethod);