用ExternalInterface实现Flex与外部容器交互

有时候Flex需要与外部容器交互,比如和别的项目交互,调用外部数据,则可以通过ExternalInterface来实现。毕竟Flex版本还是比较“年轻”,有些地方还不完美,需要借助外部力量去实现。

 --->点击阅读更多    

       ExternalInterface类是外部 API,这是一个在 ActionScript 和 Flash Player 容器之间实现直接通信的应用程序编程接口,例如,包含 JavaScript 的 HTML 页。Adobe 建议使用 ExternalInterface 实现 JavaScript 与 ActionScript 之间的所有通信。这个类主要有两个方法:


       ●addCallback(functionName:String,closure:Function):void 将ActionScript 方法注册为可从容器调用。成功调用addCallBack() 后,容器中的 JavaScript 或 ActiveX 代码可以调用在 Flash Player 中注册的函数。


        ●call(functionName:String,...arguments):*   调用由 Flash Player 容器公开的函数,不传递参数或传递多个参数。如果该函数不可用,调用将返回null;否则,它返回由该函数提供的值


         具体用法可以查阅Flex4API,里面讲的很详细。


         本人今天做了一个Flex与外部交互的小例子,做了之后对ExternalInterface有了更深的认识。

--->点击阅读更多    


         新建一个mxml页面ExternalInterfaceDemo.mxml,代码如下所示:


  1. <?xml version="1.0"encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.               xmlns:s="library://ns.adobe.com/flex/spark"  
  4.               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="app_creationCompleteHandler(event)">  
  5.     <fx:Script>  
  6.        <![CDATA[ 
  7.            import mx.controls.Alert; 
  8.            import mx.events.FlexEvent; 
  9.            
  10.            protected function app_creationCompleteHandler(event:FlexEvent):void 
  11.            { 
  12.               // TODOAuto-generated method stub 
  13.               ExternalInterface.addCallback("sendData",sendDataSelectHandler); 
  14.               getData.addEventListener(MouseEvent.CLICK,mouseClickHandler); 
  15.            } 
  16.            private function mouseClickHandler(event:MouseEvent):void{ 
  17.               ExternalInterface.call("getData"); 
  18.            } 
  19.            private function sendDataSelectHandler(obj:Object):void{ 
  20.               var name:String=obj['username']; 
  21.               var pass:String=obj['passworld']; 
  22.               username.text=name; 
  23.               passworld.text=pass; 
  24.            } 
  25.        ]]>  
  26.     </fx:Script>  
  27.     <fx:Declarations>  
  28.        <!-- Place non-visualelements (e.g., services, value objects) here -->  
  29.     </fx:Declarations>  
  30.     <s:Panel x="205" y="116" width="574" height="324">  
  31.     <s:Button id="getData" x="261" y="196" width="134" height="42" fontSize="16" label="获取外部数据"/>  
  32.     <s:Label x="179" y="92" width="71" fontSize="19" text="姓名:"/>  
  33.     <s:TextInput x="254" y="92" id="username" fontSize="16" editable="false"/>  
  34.     <s:Label x="179" y="145" fontSize="18" text="密码:"/>  
  35.     <s:TextInput x="256" y="137" id="passworld" fontSize="16" editable="false"/>  
  36.     </s:Panel>  
  37. </s:Application>  
  38.    


       运行后页面如下所示:




      接着需要新建一个JavaScript文件用于Flex与Jsp通信的桥梁。可是如果我们直接将JavaScript代码写在自动生成的ExternalInterfaceDemo.Html中的话,当我们再次修改ExternalInterfaceDemo.mxml文件后自动生成的ExternalInterfaceDemo.Html将覆盖原有的代码,这样我们的努力都会功亏与溃,那么怎么办?


        查资料我才发现,每个自动生成的html页面都是由html-template目录下的index.template.html模板页生成,如果我们在此页面中添加一个JavaScript引入文件,那么所有的页面都会自动引入此JavaScript文件。问题就此解决了。


        新建一个用于向Flex传送数据的Jsp文件externalInterfaceJsp.jsp,代码如下所示:



  1. <%@ page language="java"contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">  
  7. <title>测试</title>  
  8. <script type="text/javascript"src="../page/swf/commonJS.js"></script>  //引用创建的JavaScript文件  
  9. <style type="text/css">   
  10.        table.demo{border-collapse: collapse;margin-left:50px;margin-top:10px;}   
  11.        table.demo th,td {padding: 0; border: 1px solid #000;}   
  12.     </style>   
  13. </head>  
  14. <body>  
  15.     <form >  
  16.        <table  class="demo"  width="400px"height="150px"  id="registerTable">   
  17.            <thead>   
  18.               <tr style="height:10px;" >   
  19.                   <th colspan="2" align="center">注册表</th>   
  20.               </tr>   
  21.            </thead>   
  22.            <tbody>      
  23.               <tr>   
  24.                   <td style="text-align: right;">姓名:</td>   
  25.                   <td><input id="username"type="text">  </td>      
  26.               </tr>   
  27.               <tr>   
  28.                   <td style="text-align: right;">密码:</td>   
  29.                   <td><input id="passworld"type="password" ></td>   
  30.               </tr>   
  31.               <tr >   
  32.                   <th colspan="2" align="center"> <input type="button" value="提交" onClick="submitData()"></th>   
  33.               </tr>   
  34.           </tbody>  
  35.           </table>     
  36.     </form>  
  37. </body>  
  38. </html>  


     运行效果如下所示:




       接下来新建一个JavaScript文件commonJS.js,我是在输出目录下新建的一个JavaScript文件:



[javascript] view plain copy print ?
  1. /** 
  2.  * Flex与Jsp交互 
  3.  */  
  4. function getData()  
  5. {  
  6.     var url="../../jsp/externalInterfaceJsp.jsp";  
  7.     window.open(url,"""height=200,width=500,status=no,resizable=yes,location=no,left=95,top=110,scroll=no,help=no"); //打开一个新窗口  
  8. }  
  9. function submitData(){  
  10.     try{  
  11.     var username=document.getElementById("username").value;  
  12.     var passworld=document.getElementById("passworld").value;  
  13.     var obj=new Object();  
  14.     obj.username=username;  
  15.     obj.passworld=passworld;  
  16.     var ExternalInterfaceDemo=window.parent.opener.document.getElementById('ExternalInterfaceDemo');  //获得一个ExternalInterfaceDemo实例  
  17.     ExternalInterfaceDemo.sendData(obj);  //调用ActionScript中的方法  
  18.     window.close(); //关闭此子窗口  
  19.     }catch(e){  
  20.        alert(e);  
  21.     }  
  22. }  


       好了,开始交互,当我们在externalInterfaceJsp.jsp中输入数值后,此页面的数据就会自动带回到Flex页面。如果你实现了就说明你成功了。

--->点击阅读更多    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


一:display:flex布局display:flex是一种布局方式。它即可以应用于容器中,也可以应用于行内元素。是W3C提出的一种新的方案,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持。Flex是FlexibleBox的缩写,意为"弹性布局",用来为盒状模型提供最大的灵
1. flex设置元素垂直居中对齐在之前的一篇文章中记载过如何垂直居中对齐,方法有很多,但是在学习了flex布局之后,垂直居中更加容易实现HTML代码:1<divclass="demo">2<divclass="inner">3<p>这是一个测试这是一个测试这是一个测试这是一个测试这是一个测试</p>4</div
移动端开发知识点pc端软件和移动端apppc端软件是什么,有哪些应用。常见的例子,比如360杀毒,photoShop,VisualStudioCode等等移动端app是什么,有哪些应用。常见的例子,比如手机微信,手机qq,手机浏览器,美颜相机等等PC端与移动端的区别第一:PC考虑的是浏览器的兼容性,移动端考
最近挺忙的,准备考试,还有其他的事,没时间研究东西,快周末了,难得学点东西,grid是之前看到的,很好奇,讲的二维的布局,看起来很方便,应该很适合移动端布局,所以今天抽时间学一学,这个当是笔记了。参考的是阮老师的博客。阮一峰:CSSGrid网格布局教程http://www.ruanyifeng.com/blog/2019/03/g
display:flex;把容器设置为弹性盒模型(设置为弹性盒模型之后,浮动,定位将不会有效果)给父元素设置的属性:(1)display:flex---把容器设置为弹性盒模型。(2)flex-direction---设置弹性盒模型主轴方向默认情况下主
我在网页上运行了一个Flex应用程序,我想使用Command←组合键在应用程序中触发某些操作.这在大多数浏览器上都很好,但在Safari上,浏览器拦截此键盘事件并导致浏览器“返回”事件.有没有办法,通过Flex或通过页面上的其他地方的JavaScript,我可以告诉Safari不要这样做?解决方法:简短的
flex布局,flex-item1<template>2<viewclass="container">3<viewclass="greentxt">4A5</view>6<viewclass="redtxt">7B8<
我应该设计一个大型多点触控屏幕的应用程序.从大到大,我的意思是新闻广播员(大约55英寸及以上).该应用程序是一个交互式地图.我的问题是:开发应用程序的技术.我的第一个想法是在AdobeFlex中制作,但是HTML5也是如此……必须有一些非常棒的Java库用于触摸交互,但是在Windows平台上
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatible&quo
【1】需求:  【2】解决方案:最近遇到布局上要求item两端对齐,且最后一行在列不满的情况下要求左对齐,使用flex的justify-content:space-between;实现时发现最后一行不能左对齐,而是两端对齐方式。 不是项目上想要的效果#网上查了一些资料,有两种方法可以实现效果:**1.
我有一个java套接字服务器,它在连接时将Animal对象发送到Flash客户端.对象发送方式如下:Amf3Outputamf3Output=newAmf3Output(SerializationContext.getSerializationContext());amf3Output.setOutputStream(userSocket.getOutputStream());amf3Output.writeObject(animal)
我正在开发一个Flex3.4应用程序,它通过最新版本的BlazeDS与JBoss-4.2.2服务器上运行的JavaEE后端进行交互.当我在Tomcat上从FlashBuilder4beta2运行Flex应用程序时,一切都很好,Flex应用程序能够进行所需的远程调用.但我的生产环境是在JBoss上,当我将应用程序移动到JBoss时(更
我有一个非常大的问题.我使用Flex3/Tomcat/BlazeDS/Spring编写了一个大型应用程序,在本地开发时运行良好,当我部署到公共开发环境时很好,但是当部署到我们的测试环境时经常失败.当远程处理请求花费大量时间(超过20秒)时,故障似乎最常发生.在我的开发服务器上,错误发生,但仅
弹性和布局display:flex在ie6,ie7不兼容状态,一般在pc用的比较少,在手机端所有的浏览器都是支持的控制子元素在父元素里面的位置关系display:flex是给父元素加的文档流是按照主轴排列,只要父元素加了flex,那么里面的子元素全部可以直接添加宽高主轴的方向
FLEX2.0源码分析(一)https://www.jianshu.com/p/8bc4c5f4b19fFLEX源码分析二(网络监测swizzle)https://www.jianshu.com/p/ffb95f2cbda6FLEX源码分析三(网络监测记录FLEXNetworkRecorder)https://www.jianshu.com/p/66267dc922c5FLEX源码分析四(Systemlog)https://www.jianshu.
1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title><itle>6<style>7*{8margin:0;9padding:0;10
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatible&qu
flex:将对象作为弹性伸缩盒显示inline-flex:将对象作为内联块级弹性伸缩盒显示两者都是使子元素们弹性布局,但是如果是flex,父元素的尺寸不由子元素尺寸动态调整,不设置时默认是100%,而inline-flex则会使父元素尺寸跟随子元素们的尺寸动态调整。
<html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width"><title>test<itle><stylemedia="screen">.tab-head{list-style-type:no
有没有办法使用邮政编码找到径向距离?我的任务是搜索居住在指定距离内的所有用户.我知道用户的zipcodes.例如,距离当前位置25英里的用户.我有其他搜索类别,我正在使用mysql查询.我无法解决距离问题.我的后端是在PHP中Flex的前端和前端.对我来说最好的选择就是www.zip-codes.com