技术前沿如何在Flex中嵌入完整HTML页面

Flex有很多值得学习的地方,本文和大家重点讨论一下如何在Flex中嵌入完整HTML页面,有时候我们需要在Flex应用中嵌入HTML代码,根据嵌入HTML要求的不同有两种方法,请看下文详细介绍。

目前创新互联公司已为成百上千家的企业提供了网站建设、域名、雅安服务器托管、网站托管、服务器托管、企业网站设计、沅江网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

在Flex中嵌入完整HTML页面

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

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

 
 
 
 
  1.  
  2.  
  3.  
  4. thisisahtmlcode

     
  5. ]]> 
  6.  
  7.  
  8.  

 2、我们可以将Flex应用嵌入到HTML页面中,然后通过Flex2中的ExternalInterface(Flex1.5使用getURL("javascript:javascriptMethod"))

来实现Flex与HTMLjavascript的相互交互,进一步的,如果要在Flex应用中嵌入完整的HTML呢?

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

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

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

 
 
 
 
  1. id="IFrameDemo"width="100%"height="100%" 
  2. codebase="http://download.macromedia.com/pub/shockwave/  
  3. cabs/flash/swflash.cab"> 
  4.  
  5.  
  6.  
  7. width="100%"height="100%"name="detectiontest" 
  8. aligh="middle" 
  9. play="true"loop="false"quality="high" 
  10. allowScriptAccess="sameDomain" 
  11. type="application/x-shockwave-flash" 
  12. wmode="opaque" 
  13. swLiveConnect="true" 
  14. pluginspage="http://www.macromedia.com/go/getflashplayer"> 
  15.  
  16.  
  17.  

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

 
 
 
 
  1. style="position:absolute;background-color:transparent;border:0px;visibility:hidden;"/> 

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

 
 
 
 
  1.  
  2.  

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

 
 
 
 
  1. importflash.external.ExternalInterface;  
  2. importflash.geom.Point;  
  3. importflash.net.navigateToURL;  
  4. privatevar__source:String;  
  5. privatefunctionmoveIFrame():void{  
  6. varlocalPt:Point=newPoint(0,0);  
  7. varglobalPt:Point=this.localToGlobal(localPt);  
  8. ExternalInterface.call("moveIFrame",globalPt.x,globalPt.y,this.width,this.  
  9. height);  
  10. }  
  11. publicfunctionsetsource(source:String):void{  
  12. if(source){  
  13. if(!ExternalInterface.available)  
  14. {  
  15. //TODO:determineifthisErrorisactuallyneeded.Thedebugger  
  16. //buildgivestheerrorbelow.Assumingthatthiserrorwillnotshow  
  17. //upinthereleasebuildbuthaven’tchecked.  
  18. thrownewError("TheExternalInterfaceisnotavailableinthiscontainer.  
  19. InternetExplorerActiveX,  
  20. Firefox,Mozilla1.7.5andgreater,orotherbrowsersthatsupportNPRuntimearerequired.");  
  21. }  
  22. __source=source;  
  23. ExternalInterface.call("loadIFrame",source);  
  24. }  
  25. }  

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

//Flash场景0,0坐标varlocalPt:Point=newPoint(0,0);//转换为浏览器页面坐标varglobalPt:Point=this.localToGlobal(localPt);
这样就可以在Flex页面中嵌入任意的HTML页面了,为了方便,Brian写了个嵌入HTML页面的代理IFrame组件,该组件封装了所有需要的Flex端代码:
 

 
 
 
 
  1.  
  2. resize="callLater(moveIFrame)" 
  3. move="callLater(moveIFrame)"> 
  4.  
  5. importflash.external.ExternalInterface;  
  6. importflash.geom.Point;  
  7. importflash.net.navigateToURL;  
  8. privatevar__source:String;  
  9. privatefunctionmoveIFrame():void{  
  10. varlocalPt:Point=newPoint(0,0);  
  11. varglobalPt:Point=this.localToGlobal(localPt);  
  12. ExternalInterface.call("moveIFrame",globalPt.x,globalPt.y,this.width,this.height);  
  13. }  
  14. publicfunctionsetsource(source:String):void{  
  15. if(source){  
  16. if(!ExternalInterface.available)  
  17. {  
  18. //TODO:determineifthisErrorisactuallyneeded.Thedebugger  
  19. //buildgivestheerrorbelow.Assumingthatthiserrorwillnotshow  
  20. //upinthereleasebuildbuthaven’tchecked.  
  21. thrownewError("TheExternalInterfaceisnotavailableinthiscontainer.
  22. InternetExplorerActiveX,Firefox,  
  23. Mozilla1.7.5andgreater,orotherbrowsersthatsupportNPRuntimearerequired.");  
  24. }  
  25. __source=source;  
  26. ExternalInterface.call("loadIFrame",source);  
  27. }  
  28. }  
  29. publicfunctiongetsource():String{  
  30. return__source;  
  31. }  
  32. overridepublicfunctionsetvisible(visible:Boolean):void{  
  33. super.visible=visible;  
  34. if(visible)  
  35. {  
  36. ExternalInterface.call("showIFrame");  
  37. }  
  38. else  
  39. {  
  40. ExternalInterface.call("hideIFrame");  
  41. }  
  42. }  
  43.  
  44. ]]> 
  45.  
  46.  
  47.  

该IFrame组件有个source属性用来记录需要载入的嵌入HTML页面的地址,每次source属性更新时,调用ExternalInterface.call("loadIFrame",source)
调用javascript方法loadIFrame方法在HTML页面中的IFrame中载入要嵌入的HTML页面。
另外,重载了Canvas的visible属性,以便在Canvas隐藏HTML页面中的IFrame。
如下使用该组件在Flex应用中嵌入HTML页面方法:

 
 
 
 
  1.  

分享文章:技术前沿如何在Flex中嵌入完整HTML页面
网页URL:http://www.hantingmc.com/qtweb/news47/305547.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联