gpt4 book ai didi

javascript - IE8/JavaScript : Override native implementation of document. all.item?

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

我知道这很疯狂,但 IE 可以驱使人做出疯狂的事情。

事情是这样的:我们有一个带有内容编辑器 Web 部件的 SharePoint 2007 站点。我们有一批使用 Internet Explorer 8 的用户。我们希望网站保持 IE8/IE8 标准模式,以便更好地呈现内容。但是,此配置破坏了从 C.E. Web 部件打开富文本编辑器窗口的能力。

如果我们强制 IE8 进入 IE7 文档模式或怪癖模式,它就可以工作。事实上,其他在线资源已经建议这样做来解决问题。但我们真的更希望一切都在标准模式下运行。

通过一些调试,我们发现问题的根源在于document.all.index("<web_part_id>")的使用。在页面上检索 Web 部件对象时的 JavaScript。在 IE8 标准中,这将返回一个对象,其中大部分属性为空、null 或未定义;最值得注意的是,id属性未设置。如果您要使用 document.getElementById要检索相同的 ID,您将取回一个完全填充的对象。同样,如果 IE8 处于标准模式,您将返回一个大部分(但不完全)填充的对象——但无论如何填充的数量足以避免脚本错误。 p>

所有这些代码看起来都像是动态注入(inject)到 SharePoint 页面中的,因此排除了简单地替换对 document.all 的引用。 .然而,我们有了重新定义 document.all.item 的疯狂想法。实际调用 document.getElementById 的方法.到目前为止,我们尝试这样做是行不通的,所以也许有人可以阐明我们做错了什么(好吧,这有很多错误,但它是 IE 和 SharePoint,对吧?)。

我们最初的覆盖尝试如下所示:

<script type="text/javascript">
document.all.item = function(id) { return document.getElementById(id); }
</script>

此代码在文档中 HEAD ,高于任何其他脚本引用(SharePoint 或其他),但它似乎没有取代 native 代码。

欢迎提出想法、想法、建议和批评!

最佳答案

document.all 是一个 HTMLCollection,因此您可以使用 HTMLCollection.prototype改变行为:

if(document.all 
&& !window.opera
&& typeof HTMLDocument=='object'
&& typeof HTMLCollection=='object')//filter IE8
{
HTMLCollection.prototype.item=
function(id)
{
return((this==document.all)
? document.getElementById(id)//document.all
: this[id]//maintain native behaviour for other collections
);
}
}

关于javascript - IE8/JavaScript : Override native implementation of document. all.item?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286059/

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