gpt4 book ai didi

javascript - "Invalid argument"in IE 8 on jQuery.prepend() on flash objects

转载 作者:行者123 更新时间:2023-11-30 13:24:07 24 4
gpt4 key购买 nike

Demo page .

在 IE 8 中运行时,此代码会产生“无效参数”异常。作为描述和消息,以及此号码:-2147024809

我正在使用最新的 (1.7.1) jQuery。这是一个已知的错误?如何解决?

var objs=$('object').not('object param[name="wmode"][value="transparent"]');
var appended = $('<param name="wmode" value="transparent"></param>');
objs.prepend(appended);

HTML 片段:

<object width="Width in Pixels" height="Height in Pixels" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0">
<param name="salign" value="lt">
<param name="quality" value="high">
<param name="scale" value="noscale">

<param name="movie" value="http://geekfile.googlepages.com/flvplay.swf">
<param name="FlashVars" value="&streamName=FLV_Video_URL&skinName=http://geekfile.googlepages.com/flvskin&autoPlay=true&autoRewind=true">
<embed width="Width in Pixels" height="Height in Pixels" flashvars="&streamName=FLV_Video_URL&autoPlay=true&autoRewind=true&skinName=http://geekfile.googlepages.com/flvskin" quality="high" scale="noscale" salign="LT" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://geekfile.googlepages.com/flvplay.swf" wmode="transparent">
</embed>
</object>

错误发生在 jquery.js 的第 5771 行:

this.insertBefore( elem, this.firstChild );

更新:这不是“jQuery 问题”——它发生在原始 javascript 中。

This code throws :

function handle(object) {
var html = object.innerHTML;

// The following line throws an exception:
// Also, 'html' is not empty or undefined at this point.
object.innerHTML = '<param name="wmode" value="transparent"></param>' + html;
}

最佳答案

正如 Fresheyeball 所说,IE 看不到 <object/>作为 DOM 的一部分,或者更确切地说,一旦它被插入到文档中就不允许修改(而在插入之前,它可以被很好地修改)。

解决此问题的一个简单且相当省钱的解决方案是修改完整的 outerHTML的节点。这不会导致修改元素,但会删除它、重新创建它、替换它,因此不会抛出上述异常。

jQuery 示例:

$("object:has(> param[name=wmode][value=window]), object:not(:has(> param[name=wmode]))").each(replace);
function replace() {
this.outerHTML = this.outerHTML.replace(/<(?:[^">]+|(["']).*?\1)*>/, '$&<param name="wmode" value="opaque"/>');
}

<embed/> 的类似重新渲染可以实现如下:

$("embed[wmode=window], embed:not([wmode])").attr("wmode", "opaque").wrap("<div/>").unwrap();

关于javascript - "Invalid argument"in IE 8 on jQuery.prepend() on flash objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9150938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com