`
陈新杰
  • 浏览: 107789 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在Flex中嵌入完整HTML页面

    博客分类:
  • flex
阅读更多

有时候我们需要在Flex应用中嵌入HTML代码,根据嵌入HTML要求的不同有以下两种方法:

1、Flex文本组件(Label、Text、TextArea)的htmlText属性支持一些基本的HTML代码,例如:


<mx:TextArea>
<mx:htmlText>
   <![CDATA[
     <p align="center"><font size="15" color="#3399ff">this is a html code</font></p>
   ]]>
</mx:htmlText>
</mx:TextArea>

2、我们可以将Flex应用嵌入到HTML页面中,然后通过Flex2中的ExternalInterface(Flex1.5使用getURL("javascript:javascriptMethod"))来实现Flex与HTML javascript的相互交互,进一步的,如果要在Flex应用中嵌入完整的HTML呢?

其实实现的方法很简单,只需要使用HTML的Iframe标签来导入需嵌入的HTML页面,然后使用ExternalInterface调用相应的javasript将该Iframe移动到我们Flex页面需要嵌入HTML页面的部分之上就可以了,示意图如下:

 

也就是说,我们包含Flex SWF文件的HTML页面主要有三个部分:

1、Flex swf 插件容器,FlexBuilder自动生成部分


<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
   id="IFrameDemo" width="100%" height="100%"
   codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
     <param name="movie" value="IFrameDemo.swf" />
     <param name="quality" value="high" />
     <param name="bgcolor" value="#869ca7" />
     <embed src="IFrameDemo.swf" quality="high" bgcolor="#869ca7"
       width="100%" height="100%" name="detectiontest" aligh="middle"
       play="true" loop="false" quality="high"
       allowScriptAccess="sameDomain"
       type="application/x-shockwave-flash"
       wmode="opaque"
       swLiveConnect="true"
       pluginspage="http://www.macromedia.com/go/getflashplayer">
     </embed>
</object>

2、HTML Iframe标签,绝对定位,用来导入HTML页面


<iframe id="myFrame" name="myFrame" frameborder="0"
style="position:absolute;background-color:transparent;border:0px;visibility:hidden;" />

3、移动Iframe和在Iframe中导入需嵌入FLEX中的HTML页面的脚本


<script>
function moveIFrame(x,y,w,h) {
   var frameRef=document.getElementById("myFrame");
   frameRef.style.left=x;
   frameRef.style.top=y;
   frameRef.width=w;
   frameRef.height=h;
}

function loadIFrame(url){
top.frames["myFrame"].location.href=url;
}
</script>

Flex中的导入Iframe页面和移动Iframe的代码如下:


import flash.external.ExternalInterface;
import flash.geom.Point;
import flash.net.navigateToURL;

private var __source: String;

private function moveIFrame(): void {
   var localPt:Point = new Point(0, 0);
   var globalPt:Point = this.localToGlobal(localPt);
   ExternalInterface.call("moveIFrame", globalPt.x, globalPt.y, this.width, this.height);
}

public function set source(source: String): void {
   if (source) {
       if (! ExternalInterface.available)
       {
       // TODO: determine if this Error is actually needed. The debugger
       // build gives the error below. Assuming that this error will not show
       // up in the release build but haven't checked.
           throw new Error("The ExternalInterface is not available in this container. Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 and greater, or other browsers that support NPRuntime are required.");
       }
       __source = source;
       ExternalInterface.call("loadIFrame", source);
   }
}

两个方法分别直接调用使用ExternalInterface.call调用前面我们提到的HTML页面上的两个Javascript方法。另外一个要注意的是<Canvas/>继承自flash.display.DisplayObject类的localToGlobal方法的使用,该方法将基于Flash场景的坐标转换为基于全局本地坐标,也就是浏览器页面坐标:

//Flash场景0,0坐标 var localPt:Point = new Point(0, 0); //转换为浏览器页面坐标 var globalPt:Point = this.localToGlobal(localPt);

这样就可以在Flex页面中嵌入任意的HTML页面了,为了方便,Brian写了个嵌入HTML页面的代理IFrame组件,该组件封装了所有需要的Flex端代码:


<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.macromedia.com/2005/mxml"
   resize="callLater(moveIFrame)"
   move="callLater(moveIFrame)">
   <mx:Script>
   <![CDATA[
       import flash.external.ExternalInterface;
       import flash.geom.Point;
       import flash.net.navigateToURL;

       private var __source: String;

       private function moveIFrame(): void {
          var localPt:Point = new Point(0, 0);
           var globalPt:Point = this.localToGlobal(localPt);
           ExternalInterface.call("moveIFrame", globalPt.x, globalPt.y, this.width, this.height);
       }

       public function set source(source: String): void {
           if (source) {
              if (! ExternalInterface.available)
               {
               // TODO: determine if this Error is actually needed. The debugger
               // build gives the error below. Assuming that this error will not show
               // up in the release build but haven't checked.
                   throw new Error("The ExternalInterface is not available in this container. Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 and greater, or other browsers that support NPRuntime are required.");
               }
               __source = source;
               ExternalInterface.call("loadIFrame", source);
           }
       }

       public function get source(): String {
           return __source;
       }

       override public function set visible(visible: Boolean): void {
           super.visible=visible;
           if (visible)
           {
               ExternalInterface.call("showIFrame");
           }
           else
           {
               ExternalInterface.call("hideIFrame");
           }
       }


   ]]>
   </mx:Script>
</mx:Canvas>

该IFrame组件有个source属性用来记录需要载入的嵌入HTML页面的地址,每次source属性更新时,调用ExternalInterface.call("loadIFrame", source)调用javascript方法loadIFrame方法在HTML 页面中的IFrame中载入要嵌入的HTML页面。

另外,重载了Canvas的visible属性,以便在Canvas隐藏HTML页面中的IFrame。

如下使用该组件在Flex应用中嵌入HTML页面方法:

<IFrame id="iFrame" source="http://blog.eshangrao.com" width="300" height="400" />以上代码将在我们的Flex应用中嵌入本站首页。

 

查看示例|完整代码下载

原文:Embedding HTML in a Flex application in AS3

 

例子:

Iframe 组件
demo
http://www.deitte.com/IFrameDemo3/IFrameDemo.html
源码
http://www.deitte.com/IFrameDemo3/srcview/index.html

你看的那个例子是教程,对于不熟悉as和flex的人来说是很难看懂的,属于自定义控件,如果你是初学者,只是要使用,就用别人做好的吧。

分享到:
评论

相关推荐

    flex中嵌入html

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

    flex嵌入html的容器

    在HTML页面中嵌入Flex组件,可以利用Flex的强大功能来丰富网页的用户体验。本文将详细介绍如何在HTML中嵌入Flex容器,并以IFrameDemo为例进行说明。 首先,我们需要理解Flex和HTML的集成方式。通常,我们可以使用`...

    Flex中利用IFrame解决嵌入HTML时Flex组件被遮挡和IFrame被隐藏的问题

    而IFrame(Inline Frame)是HTML的一个元素,允许在页面内嵌入另一个完整的网页。在Flex中使用IFrame,可以将HTML内容与Flex组件结合,实现混合式应用。 遇到的典型问题主要有两个: 1. **Flex组件被遮挡**:由于...

    Iframe(Flex嵌入完整网页的类)

    在Flex中嵌入完整的网页所用到的类, xmlns:flexiframe="com.google.code.flexiframe.*" &lt;flexiframe:IFrame id="helpFrame" source="assets/dreamweaver/help/helpHome....

    flex加载html页面

    标题“flex加载html页面”指的是在Flex项目中嵌入并显示HTML内容的技术。这通常通过使用Flex中的`mx.controls.WebBrowser`组件或`flash.display.Loader`类来实现。以下是对这两个方法的详细说明: 1. **`mx....

    FLEX嵌入HTML(精简版)

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

    flex嵌入html(升级版)

    总结来说,"flex嵌入html(升级版)"的实践示例IFrameDemo展示了如何利用Flex的IFrame组件将HTML内容整合到Flex应用中,实现富媒体和交互性的结合。这种技术在需要混合展现静态内容和动态数据,或是利用现有HTML资源时...

    flex 嵌入完美Iframe

    标题中的“flex 嵌入完美Iframe”指的是在Adobe Flex应用程序中嵌入HTML的Iframe元素,并实现良好的交互和兼容性。Flex是一种基于ActionScript和MXML的开源框架,用于构建富互联网应用程序(RIA)。它允许开发者创建...

    flex嵌入JSP

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

    html嵌入flex swf

    HTML 嵌入 Flex SWF 是一种在网页中集成 Adobe Flex 生成的 Flash 动态内容的技术。Flex 是一个用于构建富互联网应用程序(RIA)的框架,它基于 ActionScript 和 MXML,允许开发者创建交互性强、用户体验良好的动态...

    FLEX3嵌入到JSP,实现的 jar 包

    JSP是一种用于创建动态网页的Java技术,它允许在HTML中嵌入Java代码或标签库(Tag Libraries)。而Flex是基于ActionScript和MXML的前端开发工具,主要用于创建富客户端应用,它通过Flash Player或Adobe AIR运行在...

    flex把html页面作为类似iframe的样子的组件完全的嵌入到mxml中去。

    "flex把html页面作为类似iframe的样子的组件完全的嵌入到mxml中去"这个主题就是关于如何在Flex应用中使用IFrame组件来展示HTML内容。 Flex是Adobe公司推出的一种基于ActionScript和MXML的开源框架,用于构建富...

    Flex嵌入IFrame解决方案

    在某些项目中,可能需要将Flex组件与HTML页面中的IFrame元素结合使用,以便实现更复杂的网页布局和功能集成。本文主要讨论的是如何在Flex应用中正确地嵌入和处理IFrame的相关问题。 1. **在iframe边上点击后,...

    Flex 与 html 交互 调用本地html

    1. **创建HTML容器**:在Flex中,你可以使用`HTML`组件来嵌入一个HTML页面。这个组件允许你加载本地或远程的HTML文件,并通过Flex与HTML之间的API进行交互。 2. **配置安全策略**:由于跨域和安全限制,你需要确保...

    flex中的iframe源码

    HTML的iframe(Inline Frame)元素允许我们在一个HTML文档中嵌入另一个HTML文档,这在需要在页面中展示独立、可滚动的内容或者加载外部资源时非常有用。在Flex中,由于它本身并不直接支持iframe,我们需要通过一些...

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

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

    Jsp嵌入Flex 、Jsp Flash报表实现源码

    在IT行业中,JSP(JavaServer Pages)是一...通过学习和应用这些源码,开发者可以掌握如何在网页中嵌入Flash报表,以及如何利用JSP与Flex的协作来实现动态数据展示,这对于提升Web应用的用户体验和功能有着显著的效果。

    flex中文教程.pdf

    完成Flex应用开发后,可以通过Flex编译器将其打包成SWF文件,然后嵌入到HTML页面中,或者作为独立的AIR应用发布。此外,Flex还支持自定义部署策略,如沙箱限制、安全策略文件等。 九、Flex学习资源 “Flex中文帮助...

    flex中使用iframe

    在Flex开发中,有时我们需要集成外部网页或者HTML内容到我们的应用程序中,这时候`iframe`就成为一个重要的工具。Flex是Adobe推出的一种基于ActionScript和MXML的开源框架,用于构建富互联网应用程序(RIA)。本文将...

    JSP嵌入一个或多个Flex

    JSP(JavaServer Pages)是一种动态网页开发技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的动态处理。而Flex是Adobe公司推出的一种用于构建富互联网应用程序(RIA)的框架,它基于ActionScript编程...

Global site tag (gtag.js) - Google Analytics