2011-09-06 164 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上,在這種情況下,這個答案几乎是無用的。關於電子電氣設備的咆哮只會讓事情變得更糟。 –

相關問題