AS和JS的调用 需要导入命名空间 import flash.external.ExternalInterface;
1 AS传送参数给JS用
ExternalInterface.call("JsMethod",asparam);
参数1 是 JS文件中的方法名字 参数2是 AS中要传递给JS的对象。
一个例子
JS代码
<script language="javascript" type="text/javascript"> function MyName(myname){ alert(myname); }
</script>
AS代码
myName="test";
// ExternalInterface.call("MyName",myName);
// trace(myName);
//适用场合 AS需要传递给 JS一个对象 或者参数 等等 。 JS改变后传递过来的参数后 AS中这个参数还是没有改变,
//这里仅仅是值传递 没有引用传值
2 js传值给 AS
需要使用
public static addCallback(methodName:String, instance:Object, method:Function) : Boolean (as2.0)
public static function addCallback(functionName:String, closure:Function):void (as3)
AS2个版本中调用的方法不同。
只说下AS3版本的参数
参数1是JS端使用的方法名,参数2是我们自己要在AS文件中写的一个函数。参数1也是参数2的别名。
AS2的解释参见 http://hi.baidu.com/paul_391/blog/item/959edaed4c051b4d78f055ad.html
一个例子
HTML端代码
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="550" height="400" id="MyVideo" align="middle">
<param name="allowFullScreen" value="false" />
<param name="allowScriptAccess" value="always" />
<param name="movie" value="MyVideo.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <embed src="MyVideo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="MyVideo" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_cn" />
</object>
<script language="javascript" type="text/javascript">
//网上流传的要考虑浏览器的兼容性。 但是在IE8中这个有问题
function thisMovie() {
if (navigator.appName.indexOf ("Microsoft") !=-1) //IE8下这里为0
{
return window[MyVideo.swf]; //是个NULL
}
else {
return document[MyVideo.swf];//应该使用这个IE8
}}
document[MyVideo.swf].GetParamFromjs("swort");
</script>
as代码
ExternalInterface.addCallback("JsMethod",GetParamFromjs);
function GetParamFromjs(param)
{
lb_param.text=param;
}
JS给AS传值 需要注意的地方比较多。
1 首先SWF对象<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="550" height="400" id="MyVideo" align="middle">
<param name="allowFullScreen" value="false" />
<param name="allowScriptAccess" value="always" />
<param name="movie" value="MyVideo.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> <embed src="MyVideo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="MyVideo" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer_cn" />
</object>
红色字体的name 和id的值需要相同。
2 allowScriptAccess 这个参数要改为 always
3 这个调用不一定会成功。如果你的JS函数报错
document[MyVideo.swf].GetParamFromjs("swort"); "对象不支持此属性或方法"
因为调用方法 需要 MyVideo.swf 的完全加载。
另外如果和服务器端有交互,最好不要用,因为它要等待服务器的回应。我测试的坏境是一个实时聊天(通过直播实现)。结果得不到JS传送过来的值。
解决办法
请调节你的AS代码中 ExternalInterface.addCallback("JsMethod",GetParamFromjs);的位置。或者使用JS函数setTimeout和setInterval 这方面内容参见 http://book.csdn.net/bookfiles/344/10034413534.shtml