Changing arbitrary flash objects wmode to transparent

12,472

Solution 1

I've been successful with this little trick:

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

It effectively redraws the flash object, worked for me.

Solution 2

Cirday's solution in general is the right one. Here's a non-jQuery version, that works in IE, FF and 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]);
    }
}

Solution 3

When you are using SWFObject to include the flash, there should be a parameter in the embedSWF method called 'params'. You pass it an object into it like this:

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

more here

Solution 4

It's not true that a flash movie needs to be republished to change the wmode parameter - its a myth:

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

I have the same menu problem, and I need some code to add the wmode parameter to any flash object being called by javascript.

I think the original post pertains to this, but I'm not sure where to start and need more info.

Share:
12,472
Nir
Author by

Nir

Updated on July 18, 2022

Comments

  • Nir
    Nir almost 2 years

    I need to change wmode of arbitrary flash objects to transparent from external js file to make sure they don't hide menus without using Jquery or similar libs.

    In FF I use getElementsByTagName("embed") and set attribute. It seems to work well.

    Specifically I'm having trouble with object set by swfObject library In IE7.

    swfObject creates the following code in 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>
    

    I tried every possible way to set wmode to transparent and make the flash not hide floating objects without success including but not limited to:

    1. Search for OBJECT and change its PARAM wmode to transparent.
    2. Set attribute of Object (wmode=transparent)
    3. Call the object's SetValue function

    None seems to work. Although the wmode seems to change Flash still hides other objects with high z-index. What am I missing here?

    • Andrew
      Andrew about 15 years
      Can you give a little more info? Are you just trying to set this once, or to switch it off and on again? Why are you unable to set the wmode when the page is first built?
  • Nir
    Nir about 15 years
    Thanks for answering. I have no control over the swfobject part of the code. When my code runs the object is already created.
  • Nir
    Nir about 15 years
    I use IE7 and flash player v 9e. There must be some workaround. perhaps restarting the player or reloading the movie??? Any idea would be appreciated. I'm stuck.
  • jacobangel
    jacobangel about 15 years
    This is the proper way to do it. You should really see if you can get the person who controls the swfobject code to add the extra parameter.
  • Justin Bull
    Justin Bull about 14 years
    im not sure if this is the "best" method but it worked for me. thanks.