代码之家  ›  专栏  ›  技术社区  ›  Lasse Espeholt

在jquery对话框顶部闪烁

  •  17
  • Lasse Espeholt  · 技术社区  · 15 年前

    我知道很多人问过这个问题,但我觉得我的处境有点不同。

    我有一个网站,因为XHTML/HTML兼容性问题,我在那里有一些隐藏在中的广告。但flash元素位于jquery对话框的顶部,这并不理想。

    有些解决方案建议将wmode设置为不透明,但我不能,因为我的广告是输出flash元素的脚本。

    另一个解决方案建议在显示对话框时隐藏广告。所以我的问题是:有没有一种方法可以在jquery对话框可见时,在不改变flash代码的情况下,将flash内容放在其后面?

    顺祝商祺! 拉斯埃斯佩尔特

    更新: 我现在慷慨地重新提出了这个问题。至于现在,我在“显示对话框”上隐藏了所有的闪光广告。但这仍然不是最佳解决方案。所以,我正在寻找一个脚本,它可以使每个Flash动画不透明(jQuery解决方案最好,但纯JavaScript解决方案可以)。或者,如果在这个问题上还有另一个没有讨论过的解决方案,我会很高兴听到的:)

    更新2: 到目前为止,我已经编写了这个脚本:

    function opaqueAllFlashMovies() {
        // Embed Flash movies
        $('embed[wmode!="opaque"]').attr('wmode', 'opaque').wrap('<div>');
    
        // Object flash movies with a wmode param
        $('object[classid$="-444553540000"] parem[wmode]').attr('value', 'opaque');
        // Object flash movies without a wmode param
        $('object[classid$="-444553540000"]').not('param[wmode]').append('<param name=\'wmode\' value=\'opaque\'/>').wrap('<div>');
    }
    

    在FF和Chrome中有效,但在IE中无效。 .append 失败。有什么想法吗?

    5 回复  |  直到 13 年前
        1
  •  13
  •   Lars Blåsjö    15 年前

    除非将wmode设置为不透明(或透明),否则不能将html放在flash前面。

    使用默认的wmode(“window”),Flash播放器将接管其区域内的所有渲染和用户交互。因此浏览器无法在该区域显示任何HTML。wmode=“opaque”(或wmode=“transparent”)所做的是禁用此默认行为,并在浏览器中集成Flash播放器区域(通常的渲染和分层等)。

    但是您不需要更改任何Flash内容来设置wmode,因为它是在HTML中完成的(或者通过swfobject或其他插入flash对象元素的脚本),所以如果您控制了您提到的“输出flash元素的脚本”,您可以在那里处理wmode设置。

        2
  •  2
  •   Community Dunja Lalic    7 年前

    我想我有个解决办法。使用jquery ui对话框,花了数小时和数小时试图解决这个问题-对我来说很有效,

    逻辑是如果我不能让jquery向前走,就让所有的flash内容向后走。研究把我带到了这个链接上——最终成功了。

    How do I programmatically set all <object>'s to have the wmode set to opaque?

    function makeObjectsOpaque3() {
        var elementToAppend = document.createElement('param');
        elementToAppend.setAttribute('name', 'wmode');
        elementToAppend.setAttribute('value', 'opaque');
        var objects = document.getElementsByTagName('object');
        for(var i = 0; i < objects.length; i++) {
            var newObject = objects[i].cloneNode(true);
            elementToAppend = elementToAppend.cloneNode(true);
            newObject.appendChild(elementToAppend);
            objects[i].parentNode.replaceChild(newObject, objects[i]);
        }
    }
    
    window.onload = makeObjectsOpaque3;
    

    if(window.onload) {
        var onLoad = window.onload;
        window.onload = function() {
            onLoad();
            makeObjectsOpaque3();
        };
    } else {
        window.onload = makeObjectsOpaque3;
    }
    
        3
  •  1
  •   Mike Crittenden    15 年前

    在flash已经加载之后,用javascript手动将wmode设置为不透明的怎么样?

        4
  •  1
  •   Tan    13 年前

    我刚刚阅读了这篇文章,并尝试在对象标记中添加参数wmode=“opaque”。适用于IE8。如果我的工作太迟了,我很抱歉。

        5
  •  0
  •   pincopallo    13 年前

    在谷歌搜索“iframe-shim”。 基本上,将iframe放在HTML后面将使其覆盖flash内容(忽略wmode设置)。

    再见