Flex中利用IFrame嵌入HTML网页后,出现菜单被遮挡的问题解决办法,包括IFrame别隐藏的问题
2013-07-13 21:23
561 查看
准备工作是建立测试工程,sdk4.6,创建一个新的Flex工程,引入flex-iframe-1.5.1.swc,工程样例代码如下:
<?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"
xmlns:flexiframe="http://code.google.com/p/flex-iframe/"
minWidth="955" minHeight="600" backgroundAlpha="0">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:VBox width="100%" height="100%" backgroundAlpha="0">
<mx:Canvas id="menuCanvas" width="100%" height="4%" backgroundColor="0x003a39"
horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:MenuBar id="menubar" width="100%" height="100%" dataProvider="{xmlList}"
styleName="yahei" mouseOver="menubar1_mouseOverHandler(event)"
labelField="@label" showRoot="false"/>
</mx:Canvas>
<mx:TabNavigator id="stnContent" mouseOver="showIFrameHandler(event)"
width="100%" backgroundAlpha="0"
height="100%">
<mx:Canvas id="test1" label="Google" backgroundAlpha="0.0" mouseOver="showIFrameHandler(event)"
width="100%" height="100%">
<flexiframe:IFrame id="iframe1" source="http://www.google.co.uk"
width="100%"
height="100%"/>
</mx:Canvas>
</mx:TabNavigator>
</mx:VBox>
<fx:Script>
<![CDATA[
[Bindable]
private var xmlList:XML = <items>
<item label='测试菜单'>
<item label='测试菜单-001'></item>
<item label='测试菜单-002'></item>
<item label='测试菜单-003'></item>
<item label='测试菜单-004'></item>
</item>
</items>;
protected function menubar1_mouseOverHandler(event:MouseEvent):void
{
if(stnContent.length > 0)
{
var canvas:Canvas = stnContent.selectedChild as Canvas;
canvas.setStyle("backgroundAlpha","0.01");
var id:String = (stnContent.selectedChild as Object).id;
//该处是当鼠标焦点移出IFrame后,将IFrame层设置到最低层-1.
ExternalInterface.call("eval", "(function(){document.getElementById('iframe10').style.zIndex='-1';})()");
}
}
private function showIFrameHandler(event:MouseEvent):void
{
var canvas:Canvas = stnContent.selectedChild as Canvas;
canvas.setFocus();
if(stnContent.length > 0)
{
var id:String = (stnContent.selectedChild as Object).id;
//当鼠标焦点又回到IFrame后,再将IFrame的层设置到最上层1.
ExternalInterface.call("eval", "(function(){document.getElementById('iframe10').style.zIndex='1';})()");
}
}
]]>
</fx:Script>
</s:Application>
需要注意几个步骤:
1.先设置鼠标移出去和进来时的IFrame的层级zindex。
2.再就是要将Flex里面的所有上层组件容器设置为背景透明: backgroundAlpha=0。
3.将Flex工程下面的html-template目录下的模板文件index.template.html中的窗口模式修改为transparent模式(params.wmode = "transparent";)。
实现原理:
1、首把Irame的地位,也就是zIndex设置为-1,让他显示在最底层。
2、光设置到最底层是不够的,因为Iframe会被Flex编译出来的swf所覆盖,所以须要把Flex的所有上层容器背景设置为透明,才能显示出来。
3、设置为透明显示出来之后若是想在Iframe长进行操纵还须要添加鼠标事务(在鼠标移到iframe上的时辰把层的zIndex设置为1,分开时设置为-1)。
最后,如果需要参考具体的案例代码,可下载本人上传的样例代码。谢谢。
<?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"
xmlns:flexiframe="http://code.google.com/p/flex-iframe/"
minWidth="955" minHeight="600" backgroundAlpha="0">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:VBox width="100%" height="100%" backgroundAlpha="0">
<mx:Canvas id="menuCanvas" width="100%" height="4%" backgroundColor="0x003a39"
horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:MenuBar id="menubar" width="100%" height="100%" dataProvider="{xmlList}"
styleName="yahei" mouseOver="menubar1_mouseOverHandler(event)"
labelField="@label" showRoot="false"/>
</mx:Canvas>
<mx:TabNavigator id="stnContent" mouseOver="showIFrameHandler(event)"
width="100%" backgroundAlpha="0"
height="100%">
<mx:Canvas id="test1" label="Google" backgroundAlpha="0.0" mouseOver="showIFrameHandler(event)"
width="100%" height="100%">
<flexiframe:IFrame id="iframe1" source="http://www.google.co.uk"
width="100%"
height="100%"/>
</mx:Canvas>
</mx:TabNavigator>
</mx:VBox>
<fx:Script>
<![CDATA[
[Bindable]
private var xmlList:XML = <items>
<item label='测试菜单'>
<item label='测试菜单-001'></item>
<item label='测试菜单-002'></item>
<item label='测试菜单-003'></item>
<item label='测试菜单-004'></item>
</item>
</items>;
protected function menubar1_mouseOverHandler(event:MouseEvent):void
{
if(stnContent.length > 0)
{
var canvas:Canvas = stnContent.selectedChild as Canvas;
canvas.setStyle("backgroundAlpha","0.01");
var id:String = (stnContent.selectedChild as Object).id;
//该处是当鼠标焦点移出IFrame后,将IFrame层设置到最低层-1.
ExternalInterface.call("eval", "(function(){document.getElementById('iframe10').style.zIndex='-1';})()");
}
}
private function showIFrameHandler(event:MouseEvent):void
{
var canvas:Canvas = stnContent.selectedChild as Canvas;
canvas.setFocus();
if(stnContent.length > 0)
{
var id:String = (stnContent.selectedChild as Object).id;
//当鼠标焦点又回到IFrame后,再将IFrame的层设置到最上层1.
ExternalInterface.call("eval", "(function(){document.getElementById('iframe10').style.zIndex='1';})()");
}
}
]]>
</fx:Script>
</s:Application>
需要注意几个步骤:
1.先设置鼠标移出去和进来时的IFrame的层级zindex。
2.再就是要将Flex里面的所有上层组件容器设置为背景透明: backgroundAlpha=0。
3.将Flex工程下面的html-template目录下的模板文件index.template.html中的窗口模式修改为transparent模式(params.wmode = "transparent";)。
实现原理:
1、首把Irame的地位,也就是zIndex设置为-1,让他显示在最底层。
2、光设置到最底层是不够的,因为Iframe会被Flex编译出来的swf所覆盖,所以须要把Flex的所有上层容器背景设置为透明,才能显示出来。
3、设置为透明显示出来之后若是想在Iframe长进行操纵还须要添加鼠标事务(在鼠标移到iframe上的时辰把层的zIndex设置为1,分开时设置为-1)。
最后,如果需要参考具体的案例代码,可下载本人上传的样例代码。谢谢。
相关文章推荐
- [Flex] IFrame系列 —— IFrame嵌入html后Alert弹出窗口被IFrame遮挡问题
- flex 3通过iframe嵌入完整html网页的简单办法
- 在flex中使用嵌入html文件以解决显示html的问题
- 使用WebView加载数据出现找不到网页的问题之解决办法(转)
- 解决Flex-IFrame嵌入网页,点击iframe外围区域iframe消失
- 利用pl/sql developer进行远程连接oracle server出现的问题及解决办法
- ExtJS嵌入网页要解决iframe自动适应窗体大小的问题
- Flex4 嵌入字体无法显示问题解决办法
- flex通过iframe嵌入html,在iframe边上的空白处点击后,iframe被隐藏
- ie,360浏览器出现无法打开网页(包括本地html)的解决方法
- 四个常见html网页乱码问题及解决办法
- 利用代理页面解决html iframe跨域访问网站问题
- nginx升级到 0.8.53 之后,使用老的配置出现duplicate MIME type "text/html"问题的解决办法
- Flex 4.x 下载进度不出现问题解决办法
- Chrome浏览器中使用 iframe 嵌入网页导致视频不能全屏的问题解决方法
- 利用代理页面解决html iframe跨域访问网站问题
- 在flex中使用嵌入html文件以解决显示html的问题
- Flex与Google Iframe弹出框被Iframe遮盖问题解决办法
- 利用Javascript解决HTML大数据列表引起的网页加载慢/卡死问题。
- 在Flex中用Iframe嵌入HTML网页