17

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

我有一个网站,其中有一些由于 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失败了。有任何想法吗?

4

5 回答 5

13

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

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

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

于 2009-10-04T14:39:13.607 回答
2

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

逻辑是如果我不能让 jquery 走在前面,让所有的 flash 内容返回。研究把我带到了这个链接——终于它起作用了。

如何以编程方式将所有 <object> 设置为将 wmode 设置为不透明?

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;
}
于 2011-03-15T00:25:16.997 回答
1

在 Flash 已经加载后,如何使用 javascript 手动将 wmode 设置为不透明?

于 2009-10-04T13:34:11.230 回答
1

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

于 2011-02-22T15:56:32.693 回答
0

在谷歌上搜索“iframe shim”。基本上在 html 后面放置一个 iframe 会将其置于 flash 内容之上(忽略 wmode 设置)。

再见

于 2011-04-27T12:45:05.480 回答