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:
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]