[Flex] IFrame系列 —— 在flex的web应用中嵌入html的方法

在flex的web应用中,我们往往必须有嵌入html的需求,这时候你会发现IFrame很有用!

flex而且可以和html中的JavaScript进行交互,flex可以通过iframe调用到html中的JavaScript方法以及获取调用后的返回值。

flex iframe下载地址:https://github.com/downloads/flex-users/flex-iframe/flex-iframe-1.5.1.zip

bin有需要用到的flex库 swc

flex代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"   minWidth="955" minHeight="600" xmlns:ns="http://code.google.com/p/flex-iframe/">

    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            protected function onCallJS(event:MouseEvent):void
            {
                // 调用当前iframe嵌入页面中的onCallJS 的JS方法
                iframeLocal.callIFrameFunction("flexCall");
            }

            protected function onSendParamToHtml(event:MouseEvent):void
            {
                // 调用当前iframe嵌入页面中的flexSendParam 的JS方法,并传入一个参数
                iframeLocal.callIFrameFunction("flexSendParam",["来自于flex的一个参数"]);
            }

            protected function onSendParamToHtml2(event:MouseEvent):void
            {
                // 调用当前iframe嵌入页面中的flexSendParam2 的JS方法,并传入2个参数。
                //flexSendParam2方法会返回一个字符串,最后一个回调就是输出值的函数
                iframeLocal.callIFrameFunction("flexSendParam2",["Frost.Yen","来自于四川"],callback);

                function callback(data:*):void
                {
                    Alert.show(data);
                }
            }
        ]]>
    </fx:Script>

    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <s:VGroup  width="100%" height="100%" >
        <s:Panel width="100%" height="100%" title="使用iframe本地页面。。。。">
            <s:VGroup  width="100%" height="100%" >
                <s:HGroup>
                    <s:Button label="Flex call js" click="onCallJS(event)"/>
                    <s:Button label="Flex send one param to js" click="onSendParamToHtml(event)"/>
                    <s:Button label="Flex send mult param to js" click="onSendParamToHtml2(event)"/>
                </s:HGroup>
                <ns:IFrame id="iframeLocal" width="100%" height="100%" source="local.html" />
            </s:VGroup>
        </s:Panel>
        <s:Panel width="100%" height="100%" title="使用远程页面。。。。">
            <ns:IFrame id="iframeContainer" width="100%" height="100%" source="http://www.cnblogs.com/frost-yen" overlayDetection="true">
            </ns:IFrame>
        </s:Panel>
    </s:VGroup>
</s:Application>

html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn">
  <head>
    <title>iframe local.html</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script type="text/javascript">
        // 无参数
        function flexCall() {
            alert("flex call js ....");
        }
        // 1个参数
        function flexSendParam(message) {
            alert(message);
        }
        // 多个参数 并返回值
        function flexSendParam2(name,message) {
            alert(name+message);
            return "来自于js的消息:"+name+" "+message;
        }
    </script>
  </head>
  <body>
    flexIframe example html page!
    <input type="button" value="say" onclick="flexCall()"/>
  </body>
</html>

需要注意的是:flex项目工程需要发布到http的应用服务器(如tomcat、Apache、iis)这些服务器中,用http请求方式才能调用到页面内容和JavaScript方法。如果不发布到应用服务器中,那样只能在iframe中嵌套远程的http请求的页面,本地静态页面是无法显示的,顾名思义就是用flex调试是不行的,而且会有意想不到的bug产生。

测试以上代码会发现

Alert.show(data); 

Alert弹出窗口会被iframe窗口遮挡,后面会讲到这个问题。
时间: 2024-10-06 09:17:52

[Flex] IFrame系列 —— 在flex的web应用中嵌入html的方法的相关文章

web页面中参数的传递方法

在web页面中参数的传递方法多样,主要有以下几种: Viewstate,Querystring,Session, Application,Cookie,Cache. Viewstate: 特点:服务启启动的各种控件的视图状态:包括控件的所有属性值:Enableviewstate可以启用和禁用视图状态:        优点:防止新产生一个页面实例后,丢失前一个页面的状态信息: 例如:在用户登录注册验证过程中,无须使用导致服务器往返行程的代码,我们只需要在客户端进行验证就可以了.另外有些控件的初始化

无法从程序集“c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.dll”中嵌入互操作类型

错误 1 无法从程序集“c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.dll”中嵌入互操作类型,因为该程序集缺少“GuidAttribute”特性 c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Web.dll AutoInternetDownloadTool 打开引用->找到指定的XXX.dll->右击属性->嵌入互操作类型->false

Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库

H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含了使用JDBC方式连接H2数据库时使用的驱动类,将"h2-1.4.183.jar"加入到[H2DBT

[Flex] IFrame系列 —— 嵌入html后Alert弹出窗口被IFrame遮挡问题

<?xml version="1.0" encoding="utf-8"?> <!--- - - - - - - - - - - - - - - - - - - - - - - - - * @author:Frost.Yen * @E-mail:[email protected] * @create: 2016-6-1 上午11:37:00 - - - - - - - - - - - - - - - - - - - - - - - - - - --

web自动化测试中的八大定位方法,推荐使用xpath

web自动化测试中的定位方法,常用相对路径来定位,推荐使用 xpath 定位 在百度进行定位 # 引入库 from selenium import webdriver # 打开谷歌浏览器,建立会话.启动Chromedriver.exe 打开Chrome driver = webdriver.Chrome() # 启动谷歌浏览器 # driver = webdriver.Firefox() # 启动火狐浏览器 # driver = webdriver.Ie() # 启动IE浏览器 # 访问百度首页

PHP pcntl_fork不能在web服务器中使用的变通方法

使用PHP扩展pcntl_fork可以进行多进程编程.编写好的程序可以在linux命令行中执行,但是如果把该程序作为apache web服务器的动态网页文件通过浏览器访问,则执行到pcntl_fork()函数时程序不再往下执行.原因是pcntl_fork()不能在apache的web方式下正常工作[1]. 一种变通的解决办法是,把含有pcntl_fork的程序作为shell脚本来运行.(1)先在shell命令行方式下调试好含有pcntl_fork的程序.(2)编写一个网页文件,该网页的表单(fo

在自定义的web监听器中嵌入web中的定时事件

在 http://www.cnblogs.com/myadmin/p/4806265.html 中说明了自定义web监听器的一些东西. 本文中的web定时任务也基于上篇文章的自定义web监听器. 新建一个方法如下: public void timeMethod() { Timer timer=new Timer(); TimerTask task=new TimerTask() { int i=1; @Override public void run() { System.out.println

在Web页中嵌入QT对象

根据最近读的QT高级编程,原来QT是可以在HTML中嵌入对象的,确实很厉害.于是自己动手写了一个Demo,中途出现了一点点问题,js执行有问题,看来要提交javascript了,我感觉python也应该适当提高提高了.下面要重点提一下我犯的错误. <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 8.0"> <TITLE><

Spring在web应用中获得Bean的方法 实现getBean方法

1.新建类,并实现 org.springframework.context.ApplicationContextAware 接口. package com.abc.framework.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationCo