0

嗨,谢谢你的访问。我尝试并挖掘了网络,但这是我真的无法开始工作的事情。

所以我通过它的提要从另一个网站获取这个对象(所以我不能编辑源材料)

<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 fiddle 中,我必须观看视频,其中一个在 embed 标记中具有 wmode 属性,而这个可以正常工作,所以我知道这是正确的属性和放置它的正确位置。但另一个应该通过jquery获取属性,根本没有改变。

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

4

1 回答 1

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
于 2012-05-12T17:05:38.203 回答