Flex与Javascript交互

关键字:ExternalInterface

所用类库:SWFObject

 

/**

 * Flex调用Javascript函数

 * @params  functionName:String   Javascript函数名称

 * @params ...params    Javascript函数参数

 * @return  返回Javascript函数的return内容

 **/

ExternalInterface.call(functionName:String, ...params);

 

main.mxml

view plaincopy to clipboardprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"   
  3.       layout="absolute">  
  4. <mx:Script>  
  5.     <!--[CDATA[  
  6.             import flash.external.ExternalInterface;  
  7.             import mx.utils.ObjectUtil;  
  8.             /** 
  9.              *  调用Java    script    函数 
  10.              *  @params evt:MouseEvent 
  11.              *  @return void 
  12.              **/  
  13.             private function myClick(evt:MouseEvent):void {  
  14.                 var item:Object = new Object();  
  15.                 item.name = "Dante";  
  16.                 item.address = "Beijing";  
  17.                          
  18.                 var results:Object = ExternalInterface.call("myfunc",item);  
  19.                 //results为myfunc函数返回的对象   
  20.                 trace(ObjectUtil.toString(results));  
  21.             }  
  22.     ]]-->  
  23. </mx:Script>  
  24.    
  25. <mx:Button label="Click me" click="myClick(event);"/>  
  26. </mx:Application>  

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <!--[CDATA[ import flash.external.ExternalInterface; import mx.utils.ObjectUtil; /** * 调用Java script 函数 * @params evt:MouseEvent * @return void **/ private function myClick(evt:MouseEvent):void { var item:Object = new Object(); item.name = "Dante"; item.address = "Beijing"; var results:Object = ExternalInterface.call("myfunc",item); //results为myfunc函数返回的对象 trace(ObjectUtil.toString(results)); } ]]--> </mx:Script> <mx:Button label="Click me" click="myClick(event);"/> </mx:Application>

index.html

view plaincopy to clipboardprint?
  1. /** 
  2.  * 被Flex调用的 myfunc函数 
  3.  *    @params item  对象 
  4.  *    @return results 返回一个对象给Flex 
  5.  **/  
  6. function myfunc(item) {  
  7.     alert(item.name+"--"+item.address);  
  8.      
  9.    //创建对象   
  10.     var results = {};  
  11.     results .name= "dante";  
  12.     results .age = 23;  
  13.     results .sex = "man";  
  14.     return obj;  
  15. }  

/** * 被Flex调用的 myfunc函数 * @params item 对象 * @return results 返回一个对象给Flex **/ function myfunc(item) { alert(item.name+"--"+item.address); //创建对象 var results = {}; results .name= "dante"; results .age = 23; results .sex = "man"; return obj; }


/**

 * Javascript调用Flex函数

 * @params   functionName:String    Javascript调用Flex函数名

 * @params   closure:Function     Flex将要调用的函数

 * @return void

 **/

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

 

main.mxml

view plaincopy to clipboardprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"     
  3.     layout="absolute" initialize="initApp()">  
  4. <mx:Script>  
  5.     <!--[CDATA[  
  6.             import flash.external.ExternalInterface;  
  7.             import mx.utils.ObjectUtil;  
  8.             /** 
  9.              *  initApp 
  10.              *  @return void 
  11.              **/  
  12.             private function initApp():void {  
  13.                  //注册列表   
  14.                  ExternalInterface.addCallback("saveD",saveData);  
  15.                  
  16.                  //HTML 与 FLEX交互   
  17.                  //params.flashvars = "xmlPath=hello&name=dante";   
  18.                  var item:Object = Application.application.parameters;  
  19.                  trace("xmlPath:"+item.xmlPath ,"name:" + item.name);  
  20.             }  
  21.             /** 
  22.              *  saveData 
  23.              *  @params item:Object  java    script    传过来的参数 
  24.              *  @return void 
  25.              **/  
  26.             private function saveData(item:Object):void {  
  27.                  trace("javascript调用Flex函数成功!");  
  28.                  nameTxt.text = item.name;     
  29.             }  
  30.     ]]-->  
  31. </mx:Script>  
  32.   <mx:TextInput id="nameTxt"/>  
  33. </mx:Application>  

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp()"> <mx:Script> <!--[CDATA[ import flash.external.ExternalInterface; import mx.utils.ObjectUtil; /** * initApp * @return void **/ private function initApp():void { //注册列表 ExternalInterface.addCallback("saveD",saveData); //HTML 与 FLEX交互 //params.flashvars = "xmlPath=hello&name=dante"; var item:Object = Application.application.parameters; trace("xmlPath:"+item.xmlPath ,"name:" + item.name); } /** * saveData * @params item:Object java script 传过来的参数 * @return void **/ private function saveData(item:Object):void { trace("javascript调用Flex函数成功!"); nameTxt.text = item.name; } ]]--> </mx:Script> <mx:TextInput id="nameTxt"/> </mx:Application>

index.html

HTML内嵌swf文件,我用的SWFObject,个人认为是一个很好的类库,简化了包含代码。
注意 :javascript调用Flex的函数,必须要获得swf的ID,可以通过document.getElementById(),也可以使用swfobject.getObjectById()。

view plaincopy to clipboardprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh" dir="ltr">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  5. <mce:script src="js/swfobject.js" mce_src="js/swfobject.js" type="text/javascript"></mce:script>     
  6. <title>SWFObject</title>  
  7. <mce:script type="text/javascript" language="javascript"><!--  
  8.     var flashvars = {};  
  9.     flashvars.xmlPath = "hello";  
  10.     flashvars.name    = "dante";  
  11.       
  12.     var params = false;  
  13.       
  14.     var attributes = {};  
  15.     //ID,也就是swf的ID,这个ID很重要,通过它调用flex的方法   
  16.     attributes.id = "swf01";    
  17.        
  18.     //内嵌swf文件,这个embedSWF方法,我在最后的补充会说下   
  19.     swfobject.embedSWF("swf/main.swf","myPanel","300","200","9.0.0","swf/expressInstall.swf",flashvars,params,attributes);  
  20.     /** 
  21.     * 调用Flex函数 
  22.     *    @return void 
  23.     **/  
  24.     function callFlex(item) {  
  25.         //通过ID获得swf,也可以使用document.getElementById();   
  26.         //var swf = document.getElementById("swf01");   
  27.         var swf = swfobject.getObjectById("swf01");  
  28.         var item = {};  
  29.         item.name = document.getElementById("nameTxt").value;  
  30.         //调用Flex函数,传参item:Object   
  31.         swf.saveD(item);  
  32.     }  
  33. // --></mce:script>   
  34. </head>  
  35. <body>  
  36. <center>  
  37.     <div id="myPanel">Flex content</div>  
  38.     <table>  
  39.         <tr>  
  40.             <td>Name</td>  
  41.             <td><input type="text" id="nameTxt"/></td>  
  42.         </tr>  
  43.         <tr>  
  44.             <td colspan="2">  
  45.                 <a href="javascript:callFlex();" mce_href="javascript:callFlex();">Call Flex</a>  
  46.             </td>  
  47.         </tr>  
  48.     </table>  
  49. </center>  
  50. </body>  
  51. </html>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <mce:script src="js/swfobject.js" mce_src="js/swfobject.js" type="text/javascript"></mce:script> <title>SWFObject</title> <mce:script type="text/javascript" language="javascript"><!-- var flashvars = {}; flashvars.xmlPath = "hello"; flashvars.name = "dante"; var params = false; var attributes = {}; //ID,也就是swf的ID,这个ID很重要,通过它调用flex的方法 attributes.id = "swf01";   //内嵌swf文件,这个embedSWF方法,我在最后的补充会说下 swfobject.embedSWF("swf/main.swf","myPanel","300","200","9.0.0","swf/expressInstall.swf",flashvars,params,attributes); /** * 调用Flex函数 * @return void **/ function callFlex(item) { //通过ID获得swf,也可以使用document.getElementById(); //var swf = document.getElementById("swf01"); var swf = swfobject.getObjectById("swf01"); var item = {}; item.name = document.getElementById("nameTxt").value; //调用Flex函数,传参item:Object swf.saveD(item); } // --></mce:script> </head> <body> <center> <div id="myPanel">Flex content</div> <table> <tr> <td>Name</td> <td><input type="text" id="nameTxt"/></td> </tr> <tr> <td colspan="2"> <a href="javascript:callFlex();" mce_href="javascript:callFlex();">Call Flex</a> </td> </tr> </table> </center> </body> </html>

 


OK,两种交互的方式已经告诉大家了,快试试吧。

 

SWFObject使用补充:

       swfobject.embedSWF()

       swfobject.getObjectById("swfID")

       swfobject.removeSWF("swfID")

 

一.swfobject.embedSWF:

内嵌swf文件,这个函数的参数比较多swfobject.embedSWF(swfUrl, id, width, height, version,expressInstallSwfurl, flashvars,params, attributes),各个参数具体功能如下:

  1. swfUrl(String,必须的)指定SWF的URL。
  2. id(String,必须的)指定将会被Flash内容替换的HTML元素(包含你的替换内容)的id。
  3. width(String,必须的)指定SWF的宽。
  4. height(String,必须的)指定SWF的高。
  5. version(String,必须的)指定你发布的SWF对应的Flash Player版本(格式为:major.minor.release)。
  6. expressInstallSwfurl(String,可选的)指定express install SWF的URL并激活Adobe express install。
  7. flashvars(String,可选的)用name:value对指定你的flashvars。
  8. params(String,可选的)用name:value对指定你的嵌套object元素的params。
  9. attributes(String,可选的)用name:value对指定object的属性。

注意 :在不破坏参数顺序的情况下,你可以忽略可选参数。如果你不想使用一个可选参数,但是会使用后面的一个可选参数,你可以简单的传入false作为参数的值。对flashvars、params和 attributes这些JavaScript对象来说,你也可以相应的传入一个空对象{}。

二.swfobject.getObjectById("swfId")

通过swfid获得swf对象,通过该对象可调用flex函数。

三.swfobject.removeSWF("swfId")

通过swfId删除swf。

注意 :删除swf这里需要提醒下,因为embedSWF是替换标签,而不是填充。比如上面的例子<div id="myPanel">Flex content</div>,如果执行了swfobject.removeSWF后,想重新添加SWF必须要重新创建<div id="myPanel">或者更改embedSWF的第二个参数更改替换新的标签ID。因为在这里SWF替换了调了<div>

转载于:https://www.cnblogs.com/liuzhong/archive/2011/07/20/2111960.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

显示器调校与Soft Proofing ZZ

版权归原作者所有&#xff01; http://www.cgan.net/science/popular/cookie/displayregulate.htm 自从桌面出版走到计算机上&#xff0c;显示器成为印前流程中重要的设备之一。从扫描、数码摄影、相片修改、排版等工序中&#xff0c;也可找到显示器的存在。但往往很多同业却忽…

SparkContext: Error initializing SparkContext解决方法

SparkContext: Error initializing SparkContext解决方法Spark在配置高可用集群中&#xff0c;出现报错 ERROR SparkContext: Error initializing SparkContext. java.net.ConnectException: Call From hadoop102/192.168.10.102 to hadoop102:8020 failed on connection excep…

tomcat 绑定 ip 及域名,限制非法域名访问

公司WEB 采用linuxtomcat架构。经常会收到电信的警告&#xff0c;说某个IP下挂用了未备案域名&#xff0c;如果不处理就封IP。鉴于此&#xff0c;需要将tomcat的访问地址进行限制&#xff0c;只允许通过IP地址或者自己指定的域名来访问。配置tomcat/conf/server.xml 文件&#…

数据库设计(四)概念数据模型

目标&#xff1a;本文主要介绍如何定义实体的主、次标识符。一、标识符标识符是实体中一个或多个属性的集合&#xff0c;可用来唯一标识实体中的一个实例。要强调的是&#xff0c;CDM中的标识符等价于PDM中的主键或候选键。每个实体都必须至少有一个标识符。如果实体只有一个标…

error C2471和error C1083

error C2471和error C1083 VS2008IDE&#xff1a;编译时出现问题&#xff1a;error C2471: 无法更新程序数据库“d:\my documents\visual studio 2008\projects\mdib\mdib\debug\vc90.pdb”error C1083: 无法打开程序数据库文件:“d:\my documents\visual studio 2008\projects…

中文/英文换行总结

html部分 <div class"parent"><p class"p1">湿哒哒大的大大大的大的大大大的大的啊啊大大大啊大大打啊打大大大</p><p class"p2">湿哒哒大的大大大的大的大大大的大的啊啊大大大啊大大打啊打大大大</p><p clas…

Go学习笔记—基于Go的进程间通信

IPC&#xff08;Inter-Process Communication 进程间通信&#xff09; 一般方法&#xff1a;(1) 半双工Unix管道 (2) FIFOs(命名管道) (3) 消息队列 (4) 信号量 (5) 共享内存 (6) 网络Socket (7) RPC(远程过程调用) &#xff08;一&#xff09;管道&#xff08;Pipe&#xff…

rsync+lsyncd实现(本地以及远程)文件实时同步

lsyncd基于lua语言开发&#xff0c;整合了rsync和notify 实现文件的实时同步 系统环境cat /etc/issue CentOS release 6.6 (Final)uname -sr Linux 2.6.32-504.el6.x86_64 服务器规划 rsync服务器&#xff1a; 192.168.10.241 rsync lsyncd服务器 &#xff…

萨蒂扬软件技术(南京)研发中心”落户高新区

萨蒂扬软件技术&#xff08;南京&#xff09;研发中心”落户高新区 2007-02-12“中国软件名城”成为南京吸引世界软件巨头强磁场“萨蒂扬软件技术&#xff08;南京&#xff09;研发中心”落户高新区 世界知名的印度软件企业巨头萨帝扬计算机服务有限公司挥师江苏亮出精彩第一笔…

JavaScript常用正则表达式收集

JavaScript常用正则表达式收集 ---------------------------------------------------------------------------------------- 正则的用法参见&#xff1a;http://blog.csdn.net/xxj_jing/article/details/6977078 下面是个简单判断 1.匹配中文字符 2.匹配特殊字符(符合 wind…

Go学习笔记—多线程

多线程编程 ​ 一个进程可以包含多个线程&#xff0c;这些线程运行的一定是同一个程序&#xff08;进程程序&#xff09;&#xff0c;且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位&#xff0c;线程是调度运行的基本单位&#xff0c;线…

maven必知必会

目录 了解mavenmaven的作用maven仓库本地配置添加远程仓库依赖搜索顺序定制包到本地仓库pom文件依赖管理原则构建声明周期插件了解maven maven的作用 maven采取约定大于配置的原则,规范了一套标准的javaweb项目结构maven提供了完备的包管理功能,不用到处找jar包了maven提供了一…

lecture 4 : More Objective-C

Creating Objects 这件事困扰我一点时间了&#xff0c;ObjC没有一个Constructor的概念 而在Create Objects这件事上既有用过自己写的-init&#xff0c;还return instancetype&#xff0c;大概这个&#xff0c;也有用过一些Class Method&#xff0c;就是明确知道是id类型的&…

对象实体 参考标准

1usingSystem;2usingSystem.Data;34namespaceFramework.Components5{ 6 /**//// <summary> 7 /// 公告通知实体 8 /// </summary> 9 public class NoticeInfo 10 { 11 基础信息-------------------------------------------------------…

SerialPort comstat is being used without defining

Run-Time Check Failure #3 - The variable comstat is being used without being initialized. 参考&#xff1a;http://blog.sina.com.cn/s/blog_5d2412000100ojx3.html 方案1: 改变项目配置属性 一种解决方案是改变基本运行时检查&#xff08;changing the runtime checks i…

Leetcode:27. 移除元素

力扣题目链接 解题思路 首先很容易想到暴力解法,用两个for循环,第一个for循环用来遍历整个数组,第二个for循环用来更新数组.但这种解法的时间复杂度为O(n^2) 因此考虑双指针思想,通过一个快指针和慢指针在一个for循环下完成两个for循环的任务,其中,快指针用来寻找新的元素,即…

【原】简单shell练习(四)

1.查看已开启端口信息 #ss -ln 2.列出谁在使用某个端口&#xff08;如&#xff1a;80&#xff09; #lsof -i:80 3.显示文件夹下文件信息 #find /home/root -type f#find -type f 4.磁盘大小信息 #df -h #du -sh * 5.查看一个文件夹下文件总个数 # ls -l |wc -l 6.查看进程是否…

JavaScriptWindow使用对象

窗口对象的属性和方法&#xff1a;格式&#xff1a;[window.]属性[window.]方法&#xff08;参数&#xff09;opener.属性opener.方法&#xff08;参数&#xff09;self.属性self.方法&#xff08;参数&#xff09;parent.属性parent.方法&#xff08;参数&#xff09;top.属性…

无法在web服务器上启动调试 您不具备调试此应用程序的权限

一般用下面的方法可以解决: 1&#xff1a;确认在“配置属性”中的“启用ASP.NET调试"为"True" 2&#xff1a;确认你的"web.config"中的"debugtrue" 3&#xff1a;若你安装过Win2000 SP4后&#xff0c;则要在命令行执行"regsvr32 i asp…

Go学习笔记—Go并发基础

Go并发基础 并行&#xff1a;程序在任意时刻内都是同时运行的 并发&#xff1a;程序在单位时间内都是同时运行的 ​扇入&#xff1a;多条通道聚合到一条通道中&#xff08;select聚合&#xff0c;加密解密服务&#xff09; ​扇出&#xff1a;一条通道发散到多条通道中&#x…