大众世界 world of demotic + 社区新动力

 找回密码
 注册会员
搜索
查看: 4871|回复: 1

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

[复制链接]
发表于 2013-9-5 16:57:14 | 显示全部楼层 |阅读模式
在html中嵌入swf有两种方式,一种是用Flash CS3直接发布,还有一种就是大家都熟悉的swfobject。这里我没什么挑剔的,能解决问题就行。
这个例子是flash调用js函数funcWaitingForFlash,执行funcWaitingForFlash函数时再回调flash的func,仅供参考。

as:

[Actionscript3] 纯文本查看 复制代码
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
        {
            // ...
        }
    }
}

[JavaScript] 纯文本查看 复制代码
function callFlashFunc(str)
{
    var obj = thisMovie('flashas3js');
    // thisMovie函数在发布时会自动生成
    // 如果用swfobject则是
    // var obj = swfobject.getObjectById("flashas3js");
    if(obj){
        obj.flashFunc(str);
    }
}
function funcWaitingForFlash()
{
    callFlashFunc('试试看');
}

js:

回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|Wod Inc. ( 蜀ICP备20000008号-8

GMT+8, 2024-5-13 11:03 , Processed in 0.101417 second(s), 34 queries .

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表