Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将任意flash对象wmode更改为透明_Javascript_Flash_Object_Swfobject_Wmode - Fatal编程技术网

Javascript 将任意flash对象wmode更改为透明

Javascript 将任意flash对象wmode更改为透明,javascript,flash,object,swfobject,wmode,Javascript,Flash,Object,Swfobject,Wmode,我需要将任意flash对象的wmode从外部js文件更改为透明,以确保它们在不使用Jquery或类似LIB的情况下不会隐藏菜单 在FF中,我使用getElementsByTagName(“嵌入”)并设置属性。它似乎工作得很好 具体来说,我在IE7中的swfObject库设置object时遇到了问题 swfObject在iE7中创建以下代码: <OBJECT id=mymovie height=400 width=134 classid=clsid:D27CDB6E-AE6D-11cf-96

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

在FF中,我使用
getElementsByTagName(“嵌入”)
并设置属性。它似乎工作得很好

具体来说,我在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
设置为
透明
,并使flash不会隐藏浮动对象,但未成功,包括但不限于:

  • 搜索
    对象
    并将其
    参数
    wmode
    更改为
    透明
  • 设置
    对象的属性(
    wmode=transparent
  • 调用
    对象
    设置值
    函数

  • 似乎都不管用。尽管wmode似乎发生了变化,但Flash仍然隐藏了具有高
    z索引的其他对象。这里我遗漏了什么?

    当您使用SWFObject包含flash时,EmbeddeSWF方法中应该有一个名为“params”的参数。将一个对象传递给它,如下所示:

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

    我几乎100%确定您不能在运行时更改wmode参数。我是说,从技术上讲你可以,但不会有任何效果。我真的很惊讶你有任何成功的尝试。您成功尝试了哪个Flash player版本和浏览器

    很抱歉,我找不到任何官方链接来证明我的观点,但我将给您留下一个关于wmode如何工作的非常有趣的链接(更新为player 10):

    干杯


    Juan

    flash电影需要重新发布才能更改wmode参数,这不是真的,这是一个神话:

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


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

    我成功地完成了以下小技巧:

    $("embed").attr("wmode", "opaque").wrap('<div>');
    
    $(“嵌入”).attr(“wmode”,“不透明”).wrap(“”);
    

    它有效地重新绘制了flash对象,这对我很有用。

    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]);
        }
    }
    
    var embed=document.getElementsByTagName('embed');
    对于(var i=0;i
    谢谢您的回答。我无法控制代码的swfobject部分。当我的代码运行时,对象已经被创建。这是正确的方法。你应该看看是否能让控制swfobject代码的人添加额外的参数。必须有一些变通办法。也许重新启动播放器或重新加载电影???任何想法都将不胜感激。我被卡住了。你能再给我一点信息吗?你只是想把它设置一次,还是想把它关闭再打开?为什么你不能在第一次构建页面时设置wmode?我不确定这是否是“最好”的方法,但它对我很有效。谢谢