我正在使用一個需要在大型瀏覽器(包括IE 11)上工作的Umbraco網站,並且我遇到了一個奇怪的問題,我只能在IE 11上覆制。我是如何失去JavaScript內置對象和所有全局變量的?
在某些時候,腳本TinyMCE的插件試圖響應執行該代碼(約四來電深)爲blur
事件:
function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); }
,它拋出一個「對象不支持此操作」試圖創建時異常RegExp對象。 cls
被定義並且具有我期望的值。
對未處理的異常暫停(使用Visual Studio調試器)時,我做了一些檢查。原來RegExp
是undefined
。我發現這極其奇怪。
多一點調查顯示,所有的內置對象都是未定義的。數字,數組,對象,數學......所有這些。另外,雖然我可以枚舉全局鍵,但所有值都是未定義的。
Weirder,我可以在有問題的範圍內使用控制檯或即時執行窗口,通過使用/pattern/
語法來創建正則表達式對象。
但是這種情況只有在事件處理程序的範圍內纔是真實的。只要事件處理程序退出,所有內置對象和全局變量值都已恢復。
如何在不丟失對基本JavaScript解析器和引擎的訪問權限的情況下失去對內建JavaScript對象的訪問權限?
而且,一旦失去了,是否有可能恢復它們?
花不了多長時間:因爲我們可能不關心那就是BEING從DOM移除一個iframe的
blur
事件中,我們可以通過修改問題行跳過它在這種情況下解決問題因爲一段錯誤的代碼迭代通過每個內置的和null ...出奇怪的tho'Array = undefined'似乎成功以及RegExp等。 – tmslnz我還沒有永遠使用過IE,但是是否有可能IE瀏覽器的窗口對象(所有這些內置對象都處於打開狀態)? – Jack
@傑克這是一個很好的想法。事件處理程序入口處的'window'對象缺少這些全局對象。我開始懷疑這是因爲這是在處理一個「模糊」 - 也許IE並沒有完成綁定JavaScript全局對象?不確定,仍在尋找...... –