`

外界与Flex Application的交互处理(之嵌入html)

阅读更多

原帖http://space.zdnet.com.cn/html/84/289384-2787313.html

这个网站用firefox打开有毛病。。。

 

 

 

 

Flex采用IFrame嵌入html,可参考http://www.deitte.com/archives/2006/08/finally_updated.htm ,这是Brian Deitte写的一个IFrame. Control对象,非常好用。但在实际应用中,还会有一些问题,需要在外围解决。

 

(1)使用IFrame可能碰到的问题:不能随着窗口的位移或调整自动调整。

 

         我是在Popup的TitleWindow中,采用TabNavigator动态载入一些Tab,这些Tab页可能是Flex Container,也可能是IFrame. Control(也就是嵌入的iframe中html页面)。因为是扩展出的TitleWindow,允许调整大小和位移,但在调整大小和位移过程中,会造成 IFrame. 中的html页面不跟随移动。

         这个问题就必须额外监控mouse事件,刷新IFrame的invalidateDisplayList。

 

view plaincopy to clipboardprint?
<mx:TabNavigator id="nav" dropShadowEnabled="true" width="98%" height="100%" horizontalGap="0" change="checkIFrameTabPaneVisible(event)"/> 
<mx:TabNavigator id="nav" dropShadowEnabled="true" width="98%" height="100%" horizontalGap="0" change="checkIFrameTabPaneVisible(event)"/>

 

view plaincopy to clipboardprint?
override protected function oMouseUp(event:MouseEvent):void{  
    super.oMouseUp( event );  
        //cacheIFrameTabPanels是索引的当前TabNavigator中所有IFrame对象  
    for each(var panel:IFrame. in cacheIFrameTabPanels){  
        Container(panel).invalidateDisplayList();  
    }    

override protected function oMouseUp(event:MouseEvent):void{
 super.oMouseUp( event );
        //cacheIFrameTabPanels是索引的当前TabNavigator中所有IFrame对象
   for each(var panel:IFrame. in cacheIFrameTabPanels){
  Container(panel).invalidateDisplayList();
 } 
}

 

(2)使用IFrame可能碰到的问题:Tab切换多次后,造成html页面悬浮,不切换。

          这时候,必须额外监控tabnavigator的change事件,将IFrame设置visible为false,(实际上就隐藏iframe中的html页面)。

 

view plaincopy to clipboardprint?
protected function checkIFrameTabPaneVisible(event:IndexChangedEvent):void{  
    var panel:DisplayObject = nav.getChildAt( nav.selectedIndex );  
        for each(var panel1:IFrame. in cacheIFrameTabPanels){  
        Container(panel1).visible = false;  
    }   
    if(panel is IFrame){  
        Container(panel).visible = true;  
    }  

protected function checkIFrameTabPaneVisible(event:IndexChangedEvent):void{
 var panel:DisplayObject = nav.getChildAt( nav.selectedIndex );
        for each(var panel1:IFrame. in cacheIFrameTabPanels){
  Container(panel1).visible = false;
 }
 if(panel is IFrame){
  Container(panel).visible = true;
 }
}

 

(3)使用IFrame可能碰到的问题:Popup的TitleWindow关闭后,html页面仍悬浮。

             这个就简单多了,监听TitleWindow的close事件,将相应的IFrame. visible设置为false即可。

 

(4)IFrame并没有对嵌入的iframe和html做回收,这个需要自己扩展。

          IFrame中只是采用了visible来隐藏和显示iframe的内容。所以在实际应用中,需要对一些操作做回收,这个需要自己扩展。

分享到:
评论
1 楼 baixiaozhe 2009-05-07  
http://blog.csdn.net/arshoon/archive/2008/06/11/2533982.aspx


Flex通常作为一个web项目的一部分嵌入到一个web页中,因此Flex程序和web页面的通信就变得非常重要。
1)  Flex提供了多种方法实现Flex程序和封装页面的交互,主要有:flashVars属性,查询字符串参数,navigateToURL()方法,以及flash.external.ExternalInterface类。
2)    Flex程序 获取环境信息:Application.application.url获取封装页面的URL,以及使用@ContextRoot();以及可以通国 flash.system.Capacities获取到有关系统的一些信息,比如版本、语言、操作系统等;
3)    flashVars用来从外部封装页面向Flex程序传送数据:
         在封装页面传入参数值:AC_FL_RunContent(flashVars, “para1=value1&…&paran=valuen”)或者
<Object>
    <param name=”movie” value=”wrapper.swf? para1=value1 />
    <embed src=”wrapper.swf?para1=value1/>
                  </Object>
                 然后flex程序里通过 Application.application.parameters.para1获取参数值;
4)    ExternalInterface提供方法使Flex程序和外部的封装页面可以相互调用对方的方法,外部接口类要受到域安全性设置(allowScriptAccess, allowNetworking)的约束。
先判断ExternalInterface是否可用:
ExternalInterface.available;
flex调用js:
ExternalInterface.call(funName, funPara1, …, funParaN);
js调用flex:
首先flex里面用ExternalInterface.addCallback(“jsFunName”,asFun),将AS里面定义的函数赋予一个js里面调用的函数的名字jsFunName;
然后在js里面用mySwf.jsFunName()调用flex里面提供的函数asFun;
ExternalInterface安全性:
一般来说js和flex的访问局限于同一个域之内。
可以设置<Object>和<Embed>的allowScriptAccess=”value”(value取值:never, always, sameDomain默认)来设置flex访问js的权限。
至于js对于flex方法的访问只有flex里面通过addCallback的js才可以访问,对于跨域,可以试用allowDomain()函数设置。
5)    navigateToURL() 可以用来打开一个新的浏览器窗口,也可以用来flex和js之间的通信。比如:
         打开一个新窗口:
var url:URLRequest = new URLRequest(http://blog.csdn.net);
navigateToURL(url, _blank);
这个函数也可以用来执行js,例如:
var url:URLRequest = new URLRequest(“javascript:window.close()”); 或者:
var urlLURLRequest = new URLRequest(“javascript:myFun(para1…paran)”)
myFun()函数是html页面的script部分定义的,函数参数一定要有引号!
navigateToURL(url, _self);
也可以用来发送email:
var urlURLRequest = new URLRequest(mailto:zoushun@hotmail.com);
navigateToURL(url, _blank);

相关推荐

    flex嵌入html的容器

    这两种方法都可以实现Flex SWF文件与HTML的交互,但具体使用哪种取决于需求和浏览器兼容性。在IFrameDemo的例子中,我们可能还会用到`&lt;iframe&gt;`标签,它允许我们在一个HTML页面内嵌入另一个页面,这样可以将Flex应用...

    FLEX嵌入HTML(精简版)

    在“FLEX嵌入HTML(精简版)”的例子中,我们将学习如何利用FLEX的强大功能与HTML的灵活性相结合,以提升用户体验。HTML由于其易读性和丰富的标记能力,常用于构建网页结构和内容,而FLEX则擅长提供动态交互和视觉效果...

    flex中嵌入html

    在Flex应用中嵌入HTML是一种常见的需求,这可以让我们在富客户端环境中利用HTML的灵活性和丰富性。Flex是由Adobe开发的一种开源框架,主要用于构建RIA(Rich Internet Applications)即富因特网应用程序。它允许...

    Flex与后台交互的几种方法详解

    根据提供的标题、描述、标签及部分内容,本文将详细介绍Flex与后台进行交互的三种主要方法:通过FlashVars传递参数、利用HttpService服务以及采用URLLoader组件。这些方法在Flex开发中非常常见,对于实现数据的前后...

    flex嵌入jsp所需的完整包4个

    Flex是Adobe公司开发的一种富互联网应用程序(Rich Internet Application,RIA)框架,主要用于构建具有动态图形、交互性丰富的Web应用。而JSP(JavaServer Pages)是Java平台上的动态网页技术,用于开发服务器端的...

    Flex实例 Flex基础 Web+Flex+LCDS Flex跟Java交互

    2. **Web+Flex集成**:Flex应用程序通常运行在Adobe Flash Player插件之上,嵌入到Web浏览器中。通过HTTP或HTTPS协议,Flex可以与服务器端进行通信,获取或发送数据。这使得Flex成为创建动态、交互性强的Web应用的...

    flex嵌入JSP

    将Flex嵌入到JSP页面中,可以结合两者的优点,提供丰富的图形用户界面和强大的后端数据处理能力。 在将Flex嵌入到JSP页面时,可能会遇到一个常见的问题:Flex组件被其他元素遮挡。这通常是由于CSS样式冲突或者布局...

    flex嵌入jsp心得

    标题与描述概述的知识点是关于如何将Flex框架嵌入到JSP页面中,以实现更丰富的数据可视化功能,特别是图表的展示。以下是基于标题、描述、标签以及部分内容的详细解析和扩展。 ### Flex嵌入JSP开发心得 #### 1. ...

    Flex ApplicationDomain

    - `html-template`:Flex编译生成HTML包的模板,用于嵌入SWF。 - `.settings`:项目特定的Eclipse或IDE设置目录。 - `src`:源代码目录,通常包含Flex应用的ActionScript类和MXML文件。 - `libs`:库文件夹,放置...

    js flex 交互

    ### 关于JS与Flex的交互知识点 #### 一、引言 随着Web技术的发展,不同技术栈间的交互变得越来越重要。本篇文章将详细介绍如何在HTML环境中实现JavaScript(简称JS)与Flex之间的数据交换与功能调用。具体而言,...

    在Flex(Flash)中嵌入HTML代码或页面(Flex IFrame)

    通过IFrame组件,可以实现Flex应用程序与嵌入HTML页面之间的交互。Flex组件可以调用HTML页面中定义的JavaScript函数,并且JavaScript函数的返回值也可以被Flex应用程序捕获和使用。 Flex IFrame组件支持一系列的...

    Flex 2和PHP交互.doc

    `login.php`是一个HTML页面,它嵌入了一个Flex应用(`login.swf`)。`login.swf`是由MXML(标记语言)和ActionScript编写的Flex应用程序,这个应用包含了HTTPService实例,用于向`flex.php`发送请求。当用户在Flex...

    flex与web的结合

    Flex是Adobe公司开发的一种富互联网应用程序(Rich Internet Application, RIA)框架,它主要用于构建具有交互性和动画效果的用户界面。Web技术则是构建和展示网页内容的工具集合,包括HTML、CSS和JavaScript等。这...

    Flex程序如何获取html容器传递的URL参数值

    在IT领域,特别是针对网页应用开发,Flex框架与HTML容器之间的数据交互是一个常见的需求场景。Flex,作为一种基于Adobe Flash的富互联网应用开发框架,能够创建高性能、跨平台的应用程序。然而,Flex程序如何从HTML...

    Flex4.5 与js,ocx相互调用

    这种交互允许 Flex 应用程序利用网页的特性,如修改 DOM 元素、处理页面事件或与服务器进行 AJAX 通信。JavaScript 调用 Flex 函数通常需要在 Flex 中先声明该函数为可外部访问的,然后在 JS 中通过 SWFObject 注册...

    Flex技术入门之如何创建flex的web工程

    6. **部署**:将编译后的SWF文件集成到Web服务器,通过HTML页面嵌入SWF,或者使用Flex的HTTPService、WebService等方式与服务器通信。 总之,Flex作为一种强大的富客户端开发技术,拥有丰富的功能和良好的生态系统...

    flex IFrame控件的配置使用详细过程

    通过上述步骤,您已经掌握了如何在Flex项目中配置和使用IFrame组件来嵌入JS页面,并实现Flex与JS页面之间的交互。这不仅可以提高开发效率,还能帮助开发者构建更加丰富和动态的应用界面。希望本文能对您的项目开发...

    FlexModule_j2ee Flex 与JSP 整合用的.jar 文件

    FlexModule_j2ee的核心是将Flex组件与JSP页面集成,通过这个.jar文件,开发者可以在JSP中引入Flex标签,如`&lt;flex:mx:Application&gt;`等,这些标签能够直接在JSP页面中嵌入Flex组件,使得Flex的应用能够在JSP环境中无缝...

    flex技术文档编写欣赏作者

    在本文中,我们将深入探讨如何在Flex应用中嵌入HTML页面,以及如何实现Flex与HTML之间的交互。 在Flex中嵌入HTML代码有两种常见方法: 1. 使用Flex文本组件(如Label、Text或TextArea)的`htmlText`属性。这个属性...

    FlexModule_j2ee.zip

    这个项目旨在展示如何在传统的Web应用中嵌入富互联网应用程序(Rich Internet Application,RIA)的Flex界面,从而提供更加动态和交互式的用户体验。 Flex是一种用于创建RIA的开源框架,由Adobe公司开发,主要使用...

Global site tag (gtag.js) - Google Analytics