amk 发表于 2013-9-5 16:57:14

flash与javascript相互通信(as3.0 as2.0)

在html中嵌入swf有两种方式,一种是用Flash CS3直接发布,还有一种就是大家都熟悉的swfobject。这里我没什么挑剔的,能解决问题就行。
这个例子是flash调用js函数funcWaitingForFlash,执行funcWaitingForFlash函数时再回调flash的func,仅供参考。

as:

package
{
    import flash.display.*;
    import flash.external.*;
    public class Main extends Sprite
    {
      public function Main():void
      {
            // ...
            ExternalInterface.addCallback('flashFunc', func);
            ExternalInterface.call('funcWaitingForFlash');
      }
      private function func(str:String):void
      {
            // ...
      }
    }
}
function callFlashFunc(str)
{
    var obj = thisMovie('flashas3js');
    // thisMovie函数在发布时会自动生成
    // 如果用swfobject则是
    // var obj = swfobject.getObjectById("flashas3js");
    if(obj){
      obj.flashFunc(str);
    }
}
function funcWaitingForFlash()
{
    callFlashFunc('试试看');
}
js:

amk 发表于 2018-6-19 18:00:03

ExternalInterface.addCallback()方法,as2和as3的区别


  ExternalInterface.addCallback是用于flash和js通信的方法。之前用as3做东西的时候,用到了这个方法,今天需要用 as2做东西,直接把代码拿过来发现运行出错。仔细查看了下资料,原来as2和as3中对于这个方法参数的个数是有区别的。
  as3中,ExternalInterface.addCallback("funJs",funAs);就可以了,但是as2中,需要 ExternalInterface.addCallback("funJs",null,funAs);中间要加一个对象才行,这个对象可以为 null。估计as2对于这个方法在设计的时候并不好(因为为null也可以嘛,可见并没有什么实质作用),所以到了as3的时候,把这个方法重新设计了一下,去掉了那个没用的第二个参数。
  在flash里定义函数(假设叫myFun),然后用ExternalInterface.addCallback()将这个函数注册给js,然后在js里用xxx.myFun()就可以调用了,xxx是html里包含swf的Object标签的id,具体看下帮助里ExternalInterface类
http://www.cuplayer.com/player/PlayerCodeAs/2011/062585.html
页: [1]
查看完整版本: flash与javascript相互通信(as3.0 as2.0)