2011-09-06 130 views
8

我想了解在Internet Explorer 6和Windows XP下运行的JavaScript密集型瘦客户端应用程序中出现的间歇性脚本错误。问题的根源是,下面的函数调用返回null值(但它并没有错误成功):在什么情况下document.open()返回null?

var doc = targetWindow.document.open("text/html","_replace"); 

targetWindowwindow对象。

无论targetWindow也不targetWindow.documentnull等我挣扎理解为什么这个调用将返回null。我对the documentation的解释是这个方法不应该返回null。

该代码已经改变,多年来完美的工作 - 直到我明白这是为什么发生的事情我不知道如何任我可能会解决这个问题,或者发生了什么改变来使这个开始发生。

什么可能导致这个函数调用返回null?

+2

是否有可能停止支持IE6?毕竟,微软甚至不支持它。另外,IE8在Windows XP上工作得很好。如果是企业环境,你应该说服他们最终从IE6的不安全感,缺陷和局限性中提升。 –

回答

1

根据你应该传递文档“替换”,而不是“_replace”。试试这个:既然你说你的代码已经工作多年了

var doc = targetWindow.document.open("text/html", "replace"); 

,那么它很可能是事情已经改变,上述建议可能不是问题。但是,它仍然值得一试。

你改变你最近使用应用程序中的任何js文件/库?另外,您是否使用页面内的任何浏览器插件?有可能这些新版本中的任何一个都会以某种方式影响您对“document.open”的调用。

0

document.open()不具有由W3C标准的任何参数。看看这个链接:http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-72161170

我建议你使用W3C文档而不是微软的,因为使用W3C你可以肯定它适用于所有的现代浏览器,而微软公司则因添加扩展而闻名,当然这些扩展只能用于他们自己的产品。它被称为EEE(拥抱,延长和扑灭)。

只需使用document.open()不带参数。有办法操纵用户历史,但这就是所谓的糟糕的编程习惯。历史是用户的私人数据,Web应用程序不应该试图操纵它。

+3

通常我会全心全意地支持这一点,但OP是维护一个应用程序(当我读它)*只*运行在IE6上,在这种情况下,这个答案几乎是无用的。关于电子电气设备的咆哮只会让事情变得更糟。 –

相关问题