分享
 
 
 

在Flex中嵌入完整HTML页面

王朝html/css/js·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

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

<mx:TextArea>

<mx:htmlText>

<![CDATA[

<palign="center"><fontsize="15"color="#3399ff">thisisahtmlcode</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自动生成部分

<objectclassid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

id="IFrameDemo"width="100%"height="100%"

codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">

<paramname="movie"value="IFrameDemo.swf"/>

<paramname="quality"value="high"/>

<paramname="bgcolor"value="#869ca7"/>

<embedsrc="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页面

<iframeid="myFrame"name="myFrame"frameborder="0"

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

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

<script>

functionmoveIFrame(x,y,w,h){

varframeRef=document.getElementById("myFrame");

frameRef.style.left=x;

frameRef.style.top=y;

frameRef.width=w;

frameRef.height=h;

}

functionloadIFrame(url){

top.frames["myFrame"].location.href=url;

}

</script>

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

importflash.external.ExternalInterface;

importflash.geom.Point;

importflash.net.navigateToURL;

privatevar__source:String;

privatefunctionmoveIFrame():void{

varlocalPt:Point=newPoint(0,0);

varglobalPt:Point=this.localToGlobal(localPt);

ExternalInterface.call("moveIFrame",globalPt.x,globalPt.y,this.width,this.height);

}

publicfunctionsetsource(source:String):void{

if(source){

if(!ExternalInterface.available)

{

//TODO:determineifthisErrorisactuallyneeded.Thedebugger

//buildgivestheerrorbelow.Assumingthatthiserrorwillnotshow

//upinthereleasebuildbuthaven’tchecked.

thrownewError("TheExternalInterfaceisnotavailableinthiscontainer.InternetExplorerActiveX,

Firefox,Mozilla1.7.5andgreater,orotherbrowsersthatsupportNPRuntimearerequired.");

}

__source=source;

ExternalInterface.call("loadIFrame",source);

}

}

两个方法分别直接调用使用ExternalInterface.call调用前面我们提到的HTML页面上的两个Javascript方法。另外一个要注意的是<Canvas/>

继承自flash.display.DisplayObject类的localToGlobal方法的使用,该方法将基于Flash场景的坐标转换为基于全局本地坐标,也就是浏览器页面坐标:

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

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

<?xmlversion="1.0"encoding="utf-8"?>

<mx:Canvasxmlns:mx="http://www.macromedia.com/2005/mxml"

resize="callLater(moveIFrame)"

move="callLater(moveIFrame)">

<mx:Script>

<![CDATA[

importflash.external.ExternalInterface;

importflash.geom.Point;

importflash.net.navigateToURL;

privatevar__source:String;

privatefunctionmoveIFrame():void{

varlocalPt:Point=newPoint(0,0);

varglobalPt:Point=this.localToGlobal(localPt);

ExternalInterface.call("moveIFrame",globalPt.x,globalPt.y,this.width,this.height);

}

publicfunctionsetsource(source:String):void{

if(source){

if(!ExternalInterface.available)

{

//TODO:determineifthisErrorisactuallyneeded.Thedebugger

//buildgivestheerrorbelow.Assumingthatthiserrorwillnotshow

//upinthereleasebuildbuthaven’tchecked.

thrownewError("TheExternalInterfaceisnotavailableinthiscontainer.InternetExplorerActiveX,Firefox,

Mozilla1.7.5andgreater,orotherbrowsersthatsupportNPRuntimearerequired.");

}

__source=source;

ExternalInterface.call("loadIFrame",source);

}

}

publicfunctiongetsource():String{

return__source;

}

overridepublicfunctionsetvisible(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页面方法:

<IFrameid="iFrame"source="http://blog.eshangrao.com"width="300"height="400"/>

以上代码将在我们的Flex应用中嵌入本站首页。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有