Проблема со ссылками при добавлении обратных вызовов к внешнему интерфейсу во 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);
Другие вопросы по тегам