Javascript和swf AS通讯

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    

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值