iframe标签flash遮盖页面元素问题——wmode参数

最近做项目过程中,遇到各种小问题,所以打算通过博客园来记录各问题的解决办法。

这篇的问题背景是这样子的:项目是用的AngularJS框架,在某个页面上用了wangEditor富文本编辑器插件(github地址:https://github.com/wangfupeng1988/wangEditor),通过配置一些参数,编辑器界面如下:

其中,视频功能,我改造了一下,原本的编辑器只能上传网络视频,我增加了上传本地视频的功能(扯远了。。忽略我。。。),插入网络视频就是把各大在线视频网站上的视频分享链接里的iframe标签copy过来,然后提交,提交完成之后,页面会加载iframe标签的独立网页,显示视频。copy一个优酷视频:<iframe height=498 width=510 src=‘http://player.youku.com/embed/XMTg5Njg2Mjk4NA==‘ frameborder=0 ‘allowfullscreen‘></iframe>,插入完成之后如下:

下面问题来了,我需要保存编辑器中的内容,点击下方保存按钮时,会出现一个模态框,给用户确认提示,除了谷歌浏览器正常,其余浏览器(ie火狐各版本)中弹框出现的一刹那,懵了,弹框的z-index设置的是1050啊,在所有css里是最大值了,但是竟然被插入的iframe标签给遮住了!!!如图:

于是,作为一枚刚入门的前端,上网查各种方法,查到的最多的一种解决办法就是修改iframe的position和z-index,但是经过试验,没能得到解决。最后查到的一个有效解决办法如下:

iframe标签的src值后面添加?wmode=transparent

在每次插入网络视频的时候,修改iframe标签,于是又改造了wangEditor.js的代码,如下,问题就解决了~

 //处理iframe标签,解决iframe视频覆盖弹出框问题

var url = $link.attr("src");
$link.attr(‘src‘, url+"?wmode=transparent");

问题解决了,那么wmode是什么呢?

wmode即window mode(窗口模式),总共有三种:

window模式,默认情况下的显示模式,在这种模式下flash player有自己的窗口句柄,这就意味着flash影片是存在于Windows中的一个显示实例,并且是在浏览器核心显示窗口之上的,所以flash只 是貌似显示在浏览器中,但这也是flash最快最有效率的渲染模式。由于他是独立于浏览器的HTML渲染表面,这就导致默认显示方式下flash总是会遮 住位置与他重合的所有DHTML层。

Opaque模式,这是一种无窗口模式,在这种情况下flash player没有自己的窗口句柄,这就需要浏览器需要告诉flash player在浏览器的渲染表面绘制的时间和位置。这时flash影片就不会在高于浏览器HTML渲染表面而是与其他元素一样在同一个页面上,因此你就可 以使用z-index值来控制DHTML元素是遮盖flash或者被遮盖。

Transparent模式,透明模式,在这种模式下flash player会将stage的背景色alpha值将为0并且只会绘制stage上真实可见的对象,同样你也可以使用z-index来控制flash影片的 深度值,但是与Opaque模式不同的是这样做会降低flash影片的回放效果,而且在9.0.115之前的flash player版本设置wmode=”opaque”或”transparent”会导致全屏模式失效。

附参考链接:http://codego.net/410900/

时间: 2024-08-08 01:12:28

iframe标签flash遮盖页面元素问题——wmode参数的相关文章

html body里边的div标签中用 iframe标签 引入其他页面

<html> <body> <div>    <!-- 增加 iframe标签 使内容固定高度,不会超过div的大小  -->     <iframe height="100%" width="100%"  frameBorder=0 src="/JpkcSys/html/left.html"></iframe>     <!--iframe的 height和 widt

JQuery调用iframe父页面元素与方法

JQuery操作iframe父页面与子页面的元素与方法 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现. 第一.在iframe中查找父页面元素的方法: $('#id', window.parent.document) 第二.在父页面中获取iframe中的元素方法: $(this).contents().find("#suggestBox") 第三.在iframe中调用父页面中定义的方法和变量: parent.method parent.value 第四.

js如何判断是否在iframe中/JQuery调用iframe父页面元素与方法

//方式一 if (self.frameElement && self.frameElement.tagName == "IFRAME") { alert('在iframe中'); } //方式二 if (window.frames.length != parent.frames.length) { alert('在iframe中'); } //方式三 if (self != top) { alert('在iframe中'); } 第一.在iframe中查找父页面元素的

iframe 调用父页面元素

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IFrame.aspx.cs" Inherits="IframeDemo.IFrame" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/x

iframe中操作主体页面的元素,方法

在不使用三大框架的情况下,iframe的使用可以做到在页面中直接引入别的页面作为当前页面的一部分,但是在iframe的使用过程中存在一些相互之间的操作 例如在iframe中获取主页面的元素,使用主页面的js中定义的方法 第一.在iframe中查找父页面元素的方法: $('#id', window.parent.document) 第二.在父页面中获取iframe中的元素方法: $(this).contents().find("#suggestBox") 第三.在iframe中调用父页面

使用iframe标签结合springMvc做文件上传

1.iframe.jsp <body> <h1>测试iframe文件上传</h1> <!-- 1.要求表单的target属性名称与iframe的name名字一致 2.iframe自身特性 1).iframe标签所在的页面称之parent(父)页面 2).iframe标签所包含的页面称之为子页面 3.本测试的子页面是:controller跳转的页面,即是ok.jsp --> <iframe name="aaa" width="

iframe标签在PC端的使用

随着前端框架的崛起 各种组件化 模块化开发 然而我发现在PC端要考虑兼容 ~~~~ 自己琢磨着 在PC端怎么吧一个页面做成一个公共的部分  发现有个iframe标签可以在页面中嵌套 虽然iframe可以做成公共部分 但问题也是很多(PS:百度) <iframe src="../home/home.html" id="cont" frameborder="0" scrolling="no" width="100%

selenium 页面元素定位之iframe里面的元素定位(包括有无id、name的)

今天在写一个功能的脚本时,发现部分部分元素总是定位不了,看了下页面的html 发现元素原来在iframe里,这个使用iframe的id和name属性用switch_to_frame跳转后就可以定位了,但是发现部分iframe没有id 和 name,突然不知怎搞了,百度了下,发现下面这个文章不错! -------------------------以下转自:http://blog.sina.com.cn/s/blog_68f262210101mcxp.html 最近正在进行webdriver的we

easyUI的iframe子页面操作父页面元素

曾经试过这样的方法 在iframe子页面获取父页面元素       代码如下:       $('#objId', parent.document); 这样可以获得父页面的元素,但是调用EasyUI的方法的时候,就会报错. 郁闷了很久很久,最终找到方案,写法的区别,如下: parent.$('# objId') 这样调用方法就不会报错 如: parent.$('# objId').tabs("add", { title: title, content: content, closabl