【问题标题】:Referencing problem when adding callbacks to Exernal Interface in Flash/ActionScript3在 Flash/ActionScript 3 中向外部接口添加回调时的引用问题
【发布时间】:2009-07-06 07:04:23
【问题描述】:

我有一个方法:myMethod() {},我想让 javascript 可以访问它。我做了一些研究,发现您需要向 ExernalInterface 添加回调,所以这就是我所做的:

ExternalInterface.addCallback("invokeMyMethod", myMethod);

现在,当我加载带有 Flash 的网页时,出现错误:

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 的存在......有人有什么想法吗?

谢谢,
马特

【问题讨论】:

    标签: javascript flash actionscript-3 externalinterface addcallback


    【解决方案1】:

    您的 myMethod 函数在 Main 类中,但您对它的引用(在 if 语句中)不是。如果您将 myMethod 设为静态,那么您的 addCallback 语句可能如下所示:

    ExternalInterface.addCallback("invokeMyMethod", Main.myMethod);
    

    或者如果你在某处有一个 Main 实例,你可以这样写:

    ExternalInterface.addCallback("invokeMyMethod", myObj.myMethod);
    

    【讨论】:

    • 除了使其成为静态之外,还有其他方法吗?我试过把: ExternalInterface.addCallback("invokeMyMethod", Main.myMethod);在 Main 类中,我仍然得到相同的引用错误......我想不出还能做什么。
    • btw static 确实消除了该错误,但它创建了其他错误,这就是为什么如果可以的话我想避免使其成为静态
    【解决方案2】:

    Jacob 上面的回答很好用。但它产生了其他错误,因为它现在正试图从静态方法访问非静态变量......所以我尝试了这个:

    我移动了:

       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
          }
       }
    }
    

    效果很好

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 2011-04-04
      • 2015-06-25
      • 2014-10-24
      • 2010-10-15
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多