【问题标题】:Changing arbitrary flash objects wmode to transparent将任意 Flash 对象 wmode 更改为透明
【发布时间】:2010-10-06 18:37:05
【问题描述】:

我需要将任意 Flash 对象的 wmode 更改为对外部 js 文件透明,以确保它们不会在不使用 Jquery 或类似库的情况下隐藏菜单。

在 FF 中,我使用 getElementsByTagName("embed") 并设置属性。它似乎运作良好。

具体来说,我在 IE7 中由swfObject 库设置的object 遇到问题。

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,使flash不隐藏浮动对象而不成功,包括但不限于:

  1. 搜索 OBJECT 并将其 PARAM wmode 更改为 transparent
  2. 设置Object的属性(wmode=transparent)
  3. 调用objectSetValue函数

似乎没有一个工作。虽然 wmode 似乎改变了 Flash 仍然隐藏了其他具有高z-index 的对象。我在这里错过了什么?

【问题讨论】:

  • 您能提供更多信息吗?您只是想设置一次,还是将其关闭再打开?为什么第一次构建页面时无法设置 wmode?​​span>

标签: javascript flash object swfobject wmode


【解决方案1】:

当您使用 SWFObject 包含 flash 时,embedSWF 方法中应该有一个参数,称为“params”。您可以像这样将一个对象传递给它:

swfobject.embedSwf(blah,blah,blah, { wmode:'transparent'});

more here

【讨论】:

  • 感谢您的回答。我无法控制代码的 swfobject 部分。当我的代码运行时,对象已经创建。
  • 这是正确的做法。你真的应该看看你是否可以让控制swfobject代码的人添加额外的参数。
【解决方案2】:

我几乎 100% 确定您不能在运行时更改 wmode 参数。我的意思是,你在技术上可以,但不会有任何效果。我真的很惊讶你有任何成功的尝试。您尝试过的 Flash 播放器版本和浏览器是什么?

很抱歉,我找不到任何官方链接来证明我的观点,但我会给你留下这个关于 wmode 工作原理的非常有趣的链接(更新到播放器 10):

What does GPU acceleration mean?

干杯,

胡安

【讨论】:

  • 我使用 IE7 和 flash player v 9e。必须有一些解决方法。也许重新启动播放器或重新加载电影???任何想法将不胜感激。我被困住了。
【解决方案3】:

Flash 电影需要重新发布才能更改 wmode 参数是不正确的 - 这是一个神话:

http://www.communitymx.com/content/article.cfm?cid=E5141

我有同样的菜单问题,我需要一些代码来将 wmode 参数添加到任何被 javascript 调用的 flash 对象。

我认为原始帖子与此有关,但我不确定从哪里开始,需要更多信息。

【讨论】:

    【解决方案4】:

    这个小技巧我已经成功了:

    $("embed").attr("wmode", "opaque").wrap('<div>');
    

    它有效地重绘了 flash 对象,对我有用。

    【讨论】:

    • 我不确定这是否是“最佳”方法,但它对我有用。谢谢。
    【解决方案5】:

    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]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 2014-04-20
      • 2011-08-25
      • 2011-08-08
      • 2012-07-25
      • 2014-06-16
      • 2011-03-27
      • 2011-07-09
      相关资源
      最近更新 更多