我需要将wmode
个任意flash对象从外部js文件更改为透明,以确保它们不使用Jquery或类似的库来隐藏菜单。
在FF中,我使用getElementsByTagName("embed")
并设置属性。它似乎运作良好。
具体来说,我在object
库设置swfObject
时遇到问题。在IE7中。
swfObject
在iE7中创建以下代码:
<OBJECT id=mymovie height=400 width=134 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000>
<PARAM NAME="_cx" VALUE="3545">
<PARAM NAME="_cy" VALUE="10583">
<PARAM NAME="FlashVars" VALUE="">
<PARAM NAME="Movie" VALUE="imgs/site/tower.swf">
<PARAM NAME="Src" VALUE="imgs/site/tower.swf">
<PARAM NAME="WMode" VALUE="Window">
<PARAM NAME="Play" VALUE="0">
<PARAM NAME="Loop" VALUE="-1">
<PARAM NAME="Quality" VALUE="High">
<PARAM NAME="SAlign" VALUE="">
<PARAM NAME="Menu" VALUE="-1">
<PARAM NAME="Base" VALUE="">
<PARAM NAME="AllowScriptAccess" VALUE="">
<PARAM NAME="Scale" VALUE="ShowAll">
<PARAM NAME="DeviceFont" VALUE="0">
<PARAM NAME="EmbedMovie" VALUE="0">
<PARAM NAME="BGColor" VALUE="FFFFFF">
<PARAM NAME="SWRemote" VALUE="">
<PARAM NAME="MovieData" VALUE="">
<PARAM NAME="SeamlessTabbing" VALUE="1">
<PARAM NAME="Profile" VALUE="0">
<PARAM NAME="ProfileAddress" VALUE="">
<PARAM NAME="ProfilePort" VALUE="0">
<PARAM NAME="AllowNetworking" VALUE="all">
<PARAM NAME="AllowFullScreen" VALUE="false">
</OBJECT>
我尝试了一切可能的方法将wmode
设置为transparent
并使闪存不会隐藏浮动对象而不会成功,包括但不限于:
OBJECT
并将其PARAM
wmode
更改为transparent
。Object
(wmode=transparent
)object
的{{1}}功能似乎无效。虽然wmode似乎改变了Flash仍然隐藏了高SetValue
的其他对象。我在这里缺少什么?
答案 0 :(得分:10)
我在这个小技巧上取得了成功:
$("embed").attr("wmode", "opaque").wrap('<div>');
它有效地重绘了flash对象,为我工作。
答案 1 :(得分:3)
Cirday的解决方案一般是正确的。这是一个非jQuery版本,适用于IE,FF和Chrome:
var embed = document.getElementsByTagName('embed');
for(var i = 0; i < embed.length; i++){
embed[i].setAttribute('wmode','opaque');
}
// FF does a "live" array when working directly with elements,
// so "els" changes as we add/remove elements; to avoid problems
// with indexing, copy to a temporary array
var els = document.getElementsByTagName('object');
var obj = [];
for(var i = 0; i < els.length; i++){
obj[i] = els[i];
}
for(var i = 0; i < obj.length; i++){
var param = document.createElement('param');
param.setAttribute('name','wmode');
param.setAttribute('value','opaque');
obj[i].appendChild(param);
var wrapper = document.createElement('div');
obj[i].parentNode.appendChild(wrapper);
if(obj[i].outerHTML){
// IE
var html = obj[i].outerHTML;
obj[i].parentNode.removeChild(obj[i]);
wrapper.innerHTML = html;
}else{
// ff/chrome
obj[i].parentNode.removeChild(obj[i]);
wrapper.appendChild(obj[i]);
}
}
答案 2 :(得分:2)
当您使用SWFObject包含flash时,embedSWF方法中应该有一个名为'params'的参数。你将一个对象传递给它:
swfobject.embedSwf(blah,blah,blah, { wmode:'transparent'});
答案 3 :(得分:1)
不需要重新发布flash电影来改变wmode参数 - 这是一个神话:
http://www.communitymx.com/content/article.cfm?cid=E5141
我有相同的菜单问题,我需要一些代码将wmode参数添加到javascript调用的任何flash对象中。
我认为最初的帖子与此有关,但我不知道从哪里开始并需要更多信息。
答案 4 :(得分:0)
我几乎100%确定您无法在运行时更改wmode参数。我的意思是,你在技术上可以,但不会有任何影响。我真的很惊讶你有任何成功的尝试。您成功尝试了哪些Flash播放器版本和浏览器?
对不起,我找不到任何官方链接来证明我的观点,但我会给你留下关于wmode如何工作的非常有趣的链接(更新到玩家10):
What does GPU acceleration mean?
干杯,
涓