我知道很多人都问过这个问题,但我认为我的情况有点不同。
我有一个网站,我有一些因为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
失败了。有什么想法吗?
答案 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设置)。
再见