views:

3322

answers:

7

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 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?

+2  A: 

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

jacobangel
Thanks for answering. I have no control over the swfobject part of the code. When my code runs the object is already created.
Nir
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.
jacobangel
A: 

I'm almost 100% sure that you cannot change the wmode parameter at runtime. I mean, you technically can, but won't have any effect. I'm actually surprised that you got any successful attempts. What Flash player version and browser did you try successfully?

I'm sorry I can't find any official link to prove my point, but I'll leave you this very interesting link about how wmode works (updated to player 10):

What does GPU acceleration mean?

Cheers,

Juan

Zárate
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.
Nir
+1  A: 

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.

A: 

I'm having this same problem. I want to fix the flash attributes so that they don't overlap my modal window. The modal window is being created by an external javascript file and it's not a viable option to ask every website admin that adds the widget to fix this manually.

Nir, did you ever find a solution?

Josh Fraser
+1  A: 

I figured it out. You can see my solution here: http://www.onlineaspect.com/2009/08/13/javascript%5Fto%5Ffix%5Fwmode%5Fparameters/

Josh Fraser
+2  A: 

I've been successful with this little trick:

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

It effectively redraws the flash object, worked for me.

Cirday
im not sure if this is the "best" method but it worked for me. thanks.
Jabes88
A: 

Can someone translate this to pure javascript?

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

I'm trying to fix this issue without jQuery.

Thanks. Marton

Gergely Marton