flash player_flash AS与JavaScript交互实例程序

更新时间:2018-07-25    来源:Action    手机版     字体:

【www.bbyears.com--Action】

ActionScript调用javaScript

需要引入flash.external.ExternalInterface,这里要用到ExternalInterface类的call方法:

ExternalInterface.call(functionName:String,…arguments):*,fuctionName:

要调用的Javascript函数名,arguments:参数,可选。

调用由 Flash Player 容器公开的函数,传递零个或多个参数。如果所需的函数不可用,则调用返回 null;否则,它返回由该函数提供的值。不允许使用递归;递归调用会生成 null 响应。

如果容器是 HTML 页,则此方法在<script> 元素中调用 JavaScript 函数。

如果该容器是其它某个 ActiveX 容器,则此方法会使用指定的名称广播事件,并且该容器会处理该事件。

如果该容器承载 Netscape 插件,您可以写入对新 NPRuntime 接口的自定义支持或嵌入 HTML 控件以及在 HTML 控件内嵌入 Flash Player。如果嵌入 HTML 控件,就可以通过与本机容器应用程序通迅的 JavaScript 接口与 Flash Player 进行通讯。

JavaScript调用ActionScript


需要引入flash.external.ExternalInterface,这要用到ExternalInterface类的addCallback方法:

ExternalInterface.addCallback( functionName:String, closure:Function):void,functionName:

要注册的函数名,closure:对应的执行函数。

ActionScript 方法注册为可从容器调用,成功调用 addCallBack() 后,容器中的 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数。

在包含 SWF 文件的 HTML 页中,在该文件的 object 标签中设置参数:

 代码如下

 Access" value="always" />

在 SWF 文件中,添加以下 ActionScript:

 flash.system.Security.allowDomain(sourceDomain )

这2个说明为了解决安全沙箱的问题,但是实际使用中,我们常常还会遇到更加头疼的问题。

具体实例

Interactive.fla

新建 fla 文件,舞台大小为300*80,颜色为#CCCCCC,类指定为Interactive;
位置(10,15)处添加260*22大小的Label label;
位置(10,50)处添加170*22大小的TextInput textInput;
位置(190,50)处添加100*22大小的Button button。
 

 代码如下



<script type="text/javascript" src="Interactive.js"></script>


 
      type="application/x-shockwave-flash" width="300" height="80">
  

 
  
  
 


 

 

function jsMethod(arg) {
 alert("as 调用 js 成功,参数为:" + arg);
 return ("as 调用 js 成功!");
}

function callAs() {
 var myFlexfun = document.getElementById("asFunction");
 var result = myFlexfun.callAs(jsInput.value);
 alert("返回值:" + result);
}

 

package
{
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.external.ExternalInterface;
 public class Interactive extends Sprite
 {
  public function Interactive()
  {
   init();
  }
  private function init():void
  {
   // 将方法 asMethod 注册为可从容器调用
   ExternalInterface.addCallback("callAs",asMethod);
   button.addEventListener(MouseEvent.CLICK,buttonClick);
  }
  private function buttonClick(event:MouseEvent):void
  {
   trace(textInput.text);
   label.text = "as 调用 js ...";
   var result:String = callJS(textInput.text);
   label.text = "返回值:" + result;
  }
  // ActionScript 调用 JavaScript;
  private function callJS(arg:String):String
  {
   // 调用指定的 JavaScript 端的函数,并顺序指定传递给 JavaScript 端函数的参数
   return ExternalInterface.call("jsMethod",arg);
  }
  // JavaScript 调用 ActionScript 时,ActionScript 端的函数;
  private function asMethod(arg:String):String
  {
   label.text = arg;
   return "js 调用了 as 成功!";
  }
 }
}

本文来源:http://www.bbyears.com/flash/43123.html

热门标签

更多>>

本类排行