FF3/Windows CSS z-index problem with YouTube player

前端 未结 5 2188
闹比i
闹比i 2020-12-07 11:45

I\'m stuck on what appears to be a CSS/z-index conflict with the YouTube player. In Firefox 3 under Windows XP, Take a look at this page: http://spokenword.org/program/21396

相关标签:
5条回答
  • 2020-12-07 11:48

    although the recommendation by CMS is valid, there is an important update. If you want to use 'iframe' instead of 'embed' , simply add ?wmode=transparent to your video link and that does the magic. I find this more simple and clean.

    Update, Feb 2014

    It's been a while and this may be outdated.

    Somebody reported that now &wmode=transparent works instead.

    0 讨论(0)
  • 2020-12-07 11:48

    i've found a pure JS function that fix it in all browsers!

    there you go:

    function fix_flash() {
        // loop through every embed tag on the site
        var embeds = document.getElementsByTagName('embed');
        for (i = 0; i < embeds.length; i++) {
            embed = embeds[i];
            var new_embed;
            // everything but Firefox & Konqueror
            if (embed.outerHTML) {
                var html = embed.outerHTML;
                // replace an existing wmode parameter
                if (html.match(/wmode\s*=\s*('|")[a-zA-Z]+('|")/i))
                    new_embed = html.replace(/wmode\s*=\s*('|")window('|")/i, "wmode='transparent'");
                // add a new wmode parameter
                else
                    new_embed = html.replace(/<embed\s/i, "<embed wmode='transparent' ");
                // replace the old embed object with the fixed version
                embed.insertAdjacentHTML('beforeBegin', new_embed);
                embed.parentNode.removeChild(embed);
            } else {
                // cloneNode is buggy in some versions of Safari & Opera, but works fine in FF
                new_embed = embed.cloneNode(true);
                if (!new_embed.getAttribute('wmode') || new_embed.getAttribute('wmode').toLowerCase() == 'window')
                    new_embed.setAttribute('wmode', 'transparent');
                embed.parentNode.replaceChild(new_embed, embed);
            }
        }
        // loop through every object tag on the site
        var objects = document.getElementsByTagName('object');
        for (i = 0; i < objects.length; i++) {
            object = objects[i];
            var new_object;
            // object is an IE specific tag so we can use outerHTML here
            if (object.outerHTML) {
                var html = object.outerHTML;
                // replace an existing wmode parameter
                if (html.match(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")[a-zA-Z]+('|")\s*\/?\>/i))
                    new_object = html.replace(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")window('|")\s*\/?\>/i, "<param name='wmode' value='transparent' />");
                // add a new wmode parameter
                else
                    new_object = html.replace(/<\/object\>/i, "<param name='wmode' value='transparent' />\n</object>");
                // loop through each of the param tags
                var children = object.childNodes;
                for (j = 0; j < children.length; j++) {
                    try {
                        if (children[j] != null) {
                            var theName = children[j].getAttribute('name');
                            if (theName != null && theName.match(/flashvars/i)) {
                                new_object = new_object.replace(/<param\s+name\s*=\s*('|")flashvars('|")\s+value\s*=\s*('|")[^'"]*('|")\s*\/?\>/i, "<param name='flashvars' value='" + children[j].getAttribute('value') + "' />");
                            }
                        }
                    }
                    catch (err) {
                    }
                }
                // replace the old embed object with the fixed versiony
                object.insertAdjacentHTML('beforeBegin', new_object);
                object.parentNode.removeChild(object);
            }
        }
    }
    

    now you can just run in when the page loads with jQuery:

     $(document).ready(function () {
                fix_flash();    
     });
    
    0 讨论(0)
  • 2020-12-07 11:49

    I've noticed that wmode="opaque" terribly affects on usage of CPU. Chrome make on my notebook 50% CPU usage (without opaque ~8%).
    So be careful with this option.

    0 讨论(0)
  • 2020-12-07 11:54

    Try to add the wmode parameter to be opaque like this:

    (Note that it's included in both a <param> tag and a wmode attribute on the <embed> tag.)

    <object width='425' height='344'> 
        <param name='movie' value='http://www.youtube.com/v/Wj_JNwNbETA&hl=en&fs=1'> 
        <param name='type' value='application/x-shockwave-flash'> 
        <param name='allowfullscreen' value='true'> 
        <param name='allowscriptaccess' value='always'> 
        <param name="wmode" value="opaque" />
        <embed width='425' height='344'
                src='http://www.youtube.com/v/Wj_JNwNbETA&hl=en&fs=1'
                type='application/x-shockwave-flash'
                allowfullscreen='true'
                allowscriptaccess='always'
                wmode="opaque"
        ></embed> 
        </object> 
    
    0 讨论(0)
  • 2020-12-07 12:06

    We use jQuery Flash plugin to convert YouTube links to Flash movies. In this case, wmode is passed as an option in order to get the YouTube video to appear underneath the jQuery Dialog we open:

    $('a[href^="http://www.youtube.com"]').flash(
        { width: nnn, height: nnn, wmode: 'opaque' }
    );
    
    0 讨论(0)
提交回复
热议问题