zoukankan      html  css  js  c++  java
  • JS 与 AS3 的通信

    js与as3的交互|as3 js 在html中应用|as3调用js

    一直没去深入研究下AS3与JS的交互开发也就是SWF在html中的通信,最近出于项目要求被迫投入了,也在这里做个汇总

    一:HTML中最快速的传值方式

    在HTML中插SWF时,可以跟个参数,比如:

    files/home.swf?id="21"

    在AS3里可以这样去接收

    AS3代码

    1. var id:String=stage.loaderInfo.parameters["id"];  

    这种传值方式其实AS2的时候也是这样做的,到AS3时使用parameters 属性替换了AS1.0 和2.0 提供SWF文件参数作为主时间轴的技术,所以我们改用一下AS3的取值方式就行了.
    这种方式只能是单边一次性传值,有时候会用得到,但需要与JS相互通信就不行了,还有,只能接收字符串.

    二:使用外部通信接口ExternalInterface

    这也是AS2时代进化来的,目前公认的最靠谱的通信方式.

     使用方法:

    1.JS调用AS3的函数

    确定JS调用AS3之前,要在AS3中绑定调用函数,也就是说,只有AS3答应给的方法JS才能调用.

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

    有两个参数:
    functionName:String ― 容器可用于调用函数的名称。  
    closure:Function ― 要调用的 closure 函数。 这可能是一个独立的函数,或者可能是引用对象实例方法的 closure 方法。通过传递 closure 方法,回调实际上可以定向到特定对象实例的方法。  
     

    例如: 

    AS3代码

    1. ExternalInterface.addCallback("getASVars",getASFun);      
    2. private function getASFun(value:String):void {
    3. //得到JS传来的值:value   
    4. }   

    好了,可以在JS中去调用这个方法了,调用前还要先取得插进HTML的SWF的ID,我们在HTML中不管用什么方式插都可以设置ID
    例如先通过id为"mov"来获取对象,再调用上面绑定的方法:

    JavaScript代码

    1. function thisMovie(movieName) {   
    2.          if (navigator.appName.indexOf("Microsoft") != -1) {   
    3.              return window[movieName];   
    4.          } else {   
    5.              return document[movieName];   
    6.          }   
    7.      }   
    8. thisMovie("mov").getASVars(value);  

    2.AS3调用JS的函数

    AS3调JS直接使用call就行了

    使用:ExternalInterface.call(functionName:String, ... arguments):*

    这个方法有两个参数: 
    functionName:String ― 要在容器中调用的函数的名称。  
    ... arguments ― 传递到容器中的函数的参数。 您可以指定零个或多个参数,参数之间用逗号分隔。 这些参数可以是任何 ActionScript 数据类型。 当调用 JavaScript 函数时,ActionScript 类型自动封装到 JavaScript 类型中;当调用其它某个 ActiveX 容器时,将在请求消息中对参数进行编码。

    例如:

    AS3代码

    1. ExternalInterface.call("setToJS","paramTest");  

     在JS中编写这个setToJS的函数

    JavaScript代码

    1. function senToJS(value){      
    2.   alert(value)//输出:paramTest      
    3. }     

     

     看起来很爽,但也不是完全靠谱,这个接口还是会挑食的,只有在以下浏览器中才支持:

     

    浏览器 操作系统 操作系统 Internet Explorer 5.0 及更高版本 Windows   Netscape 8.0 及更高版本 Windows Macintosh Mozilla 1.7.5 及更高版本 Windows Macintosh Firefox 1.0 及更高版本 Windows Macintosh Safari 1.3 及更高版本   Macintosh

     

    还有个安全沙箱的问题,如果出现安全沙箱警报,可以使用以下两种修正方法:

    <1>.在包含 HTML 页中的 SWF 文件的 <object> 标签中,设置以下参数: 
    <param name="allowScriptAccess" value="always" />
    <2>.在 SWF 文件中,添加以下 ActionScript: 
    flash.system.Security.allowDomain(sourceDomain)

  • 相关阅读:
    自动换行的两种代码(C#)
    C#的SubString(int start,int end);
    php数组添加元素的方法
    php通过生成动态变量(变量名中还有变量)
    php定义空的数组
    php的$GLOBALS例子
    WINCRIS的使用
    java的PreparedStatement中使用like时的问题
    php发送get请求
    在HTML中使用object和embed标签插入视频
  • 原文地址:https://www.cnblogs.com/klh5211314/p/3347182.html
Copyright © 2011-2022 走看看