Flash在jQuery对话框之上

时间:2009-10-04 08:41:16

标签: jquery html flash dialog z-index

我知道很多人都问过这个问题,但我认为我的情况有点不同。

我有一个网站,我有一些因为xhtml / html兼容性问题而隐藏在Flash中的广告。但是flash元素位于我的jQuery对话框之上,这并不理想。

有些解决方案建议将wmode设置为不透明,但我不能,因为我的广告是输出flash元素的脚本。

另一种解决方案建议在显示对话框时隐藏广告。所以我的问题是:有没有办法将Flash内容放在我的jQuery对话框后面,而它们是可见的,而不会改变flash代码?

祝你好运, Lasse Espeholt

更新 我现在用赏金重新提出这个问题。至于现在,我将每个Flash广告隐藏在“显示对话框”中。但这仍然不是最佳解决方案。所以,我正在寻找一个可以使每个Flash动画变得不透明的脚本(jQuery解决方案最好,但是一个普通的JavaScript解决方案就可以了)。或者,如果应该有另一个未在此问题中讨论的解决方案,我将很高兴听到它:)

更新2: 到目前为止,我已经制作了这个剧本:

function opaqueAllFlashMovies() {
    // Embed Flash movies
    $('embed[wmode!="opaque"]').attr('wmode', 'opaque').wrap('<div>');

    // Object flash movies with a wmode param
    $('object[classid$="-444553540000"] parem[wmode]').attr('value', 'opaque');
    // Object flash movies without a wmode param
    $('object[classid$="-444553540000"]').not('param[wmode]').append('<param name=\'wmode\' value=\'opaque\'/>').wrap('<div>');
}

适用于FF和Chrome,但不适用于IE。显然,.append失败了。有什么想法吗?

5 个答案:

答案 0 :(得分:13)

除非将wmode设置为opaque(或透明),否则不能将HTML放在Flash前面。

使用默认的wmode(“window”),Flash Player将接管其区域中的所有渲染和用户交互。因此浏览器无法在该区域中显示任何HTML。 wmode =“opaque”(或wmode =“transparent”)的作用是禁用此默认行为,并在浏览器通常的渲染和分层等中集成Flash Player区域。

但是您不需要更改任何Flash内容来设置wmode,因为它是在HTML中完成的(或通过SWFObject或其他插入Flash对象元素的脚本),所以如果您可以控制“输出的脚本”你提到的flash元素,你可以在那里处理wmode设置。

答案 1 :(得分:2)

我想我有一个解决方案。使用jquery-ui对话框,花费数小时和数小时试图解决这个问题 - 为我工作,

逻辑是,如果我不能让jquery走在前面,让所有flash内容都回归。研究把我带到了这个环节 - 最后它终于奏效了。

How do I programmatically set all <object>'s to have the wmode set to opaque?

function makeObjectsOpaque3() {
    var elementToAppend = document.createElement('param');
    elementToAppend.setAttribute('name', 'wmode');
    elementToAppend.setAttribute('value', 'opaque');
    var objects = document.getElementsByTagName('object');
    for(var i = 0; i < objects.length; i++) {
        var newObject = objects[i].cloneNode(true);
        elementToAppend = elementToAppend.cloneNode(true);
        newObject.appendChild(elementToAppend);
        objects[i].parentNode.replaceChild(newObject, objects[i]);
    }
}

window.onload = makeObjectsOpaque3;

if(window.onload) {
    var onLoad = window.onload;
    window.onload = function() {
        onLoad();
        makeObjectsOpaque3();
    };
} else {
    window.onload = makeObjectsOpaque3;
}

答案 2 :(得分:1)

在flash加载后用javascript手动将wmode设置为opaque怎么样?

答案 3 :(得分:1)

我刚读过这篇文章并试图在对象标签中添加参数wmode =“opaque”。它适用于IE 8.如果我的帖子太晚,我很抱歉。

答案 4 :(得分:0)

在谷歌搜索“iframe shim”。 基本上把一个iframe放在html后面会把它带到flash内容上(忽略wmode设置)。

再见