在所有问题之上的chrome对象元素

时间:2012-05-12 15:38:36

标签: html flash google-chrome

嗨,谢谢你的光临。 我尝试并挖掘网络,但这是我真的无法工作的东西。

所以我通过其Feed从其他网站获取此对象(因此我无法编辑源材料)

<object width="100%" height="420" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
    <param name="allowFullScreen" value="true" />
    <param name="allowscriptaccess" value="always" />
    <param name="src" value="http://www.youtube.com/v/8UFhdYhE9ko?version=3&amp;hl=de_DE" />
    <param name="allowfullscreen" value="true" />
    <embed width="100%" height="420" type="application/x-shockwave-flash" src="http://www.youtube.com/v/8UFhdYhE9ko?version=3&amp;hl=de_DE" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" />
</object>

现在,在chrome中,无论z-index如何,此对象都高于其他所有对象。这是因为没有wmode定义的事实。我知道,我知道我可以通过jquery修改源代码并将此wmode放入其中,其中包括

$("object").each(function() {
    $(this).children("embed").attr("wmode", "opaque");
});

但是好老的丁目一点都没有变化。我的iframe工作正常,我做了几乎相同的事情,一切都很好。但在对象上,我无法让它工作。可能是,jquery的举动为时已晚......?在我的js小提琴下面我有视频,一个有wmode属性insinde嵌入标签,这一个工作正常,所以我知道这是正确的属性和正确的位置来放置它。但另一个,应该通过jquery获取属性,根本不会改变。

这是一个jsfiddle。它是物体上方的红色方框。在“普通”浏览器中,框位于两个对象上方,在chrome中,上部电影位于红色框上方。

1 个答案:

答案 0 :(得分:1)

您可以使用此函数复制所有对象,插入wmode参数并将旧对象替换为新对象:

$("object").each(function() {
    var $newObject = $(this).clone(true);
    $newObject.children("embed").attr("wmode", "opaque");
    $(this).replaceWith($newObject);
});

小提琴:http://jsfiddle.net/WTE7X/3/

如果您正在使用PHP,那么如果$html是包含对象的字符串,则可以非常简单地执行此操作:

$doc = new DOMDocument();
$doc->loadHTMLFile('html');
$finalDoc = new DOMDocument();
$objects = $doc->getElementsByTagName('object');
for($i = 0; $i < $objects->length; $i++)
{
    $embeds = $objects->item($i)->getElementsByTagName('embed');
    for($j = 0; $j < $embeds->length; $j++)
    {
        $embeds->item($j)->setAttribute('wmode', 'opaque');
    }
    $finalDoc->appendChild($finalDoc->importNode($objects->item($i), true));
}

$fixedHTML = $finalDoc->saveHTML(); // This holds the new HMTL to output