2010-10-11 21 views
16

我今天正在對某些功能做一些跨瀏覽器測試,並且碰到了一個相當漂亮的小寶石。IE6/7/8內存不足?

在IE8:Out of memory at line: 99

在IE7:Out of memory at line: 100

在IE6:Stack overflow at line: 101

從我已經能夠挖掘,大部分的這些消息開始出現的時候,它是一個問題是擁有一個元素數大於65,535的數組。但是,我不認爲這是目前的問題。

所討論的功能是在iframe「關閉」當前iframe以及使用jQuery「打開」另一個時的動作。它實際上發生在關閉/開放式的交互中。

以前有沒有人見過類似的東西?

編輯:經過進一步調查,它實際上似乎沒有與iframe相關。仍在挖掘,但任何建議,將不勝感激。

+0

您測試了哪些其他瀏覽器以及添加了多少元素? – RobertPitt 2010-10-11 21:21:48

+0

在Linux Chrome和FF3.6和Windows FF3.6中正常工作。 – 2010-10-11 21:22:26

+0

由於無限遞歸,堆棧溢出通常是*。你確定你的代碼中沒有? – bzlm 2010-10-11 21:25:53

回答

11

所以原來IE和其他所有處理事情的問題都是不一樣的......照常。

我有一個函數,我用來拋出一個錯誤,它是遞歸的設計。我希望這個錯誤顯示在主Document中,而不是一個iframe(不幸的是,它正在這個網站上廣泛使用)。我的功能要點如下:

myClass.myErrorFunc = function (msg) { 
    if (parent !== window) { 
     parent.myClass.myErrorFunc(msg); 
    } else { 
     // display the error 
    } 
} 

這在Chrome和Firefox中運行良好。它遞歸一級,並在主窗口中顯示錯誤,因爲一旦它達到最高級別,父級就是它自己。顯然,在IE中,窗口的父項本身不是。因此,無限遞歸。

請繼續關注解決方案。

編輯:很顯然,這是用!==代替!=的問題。當我打開它!=,通過第二次(因爲這是被從iframe運行),window == parent判斷爲真,但window === parent不...

不管結果如何,我會接受它...

感謝您的幫助球員。

0

看起來你的內存太多了,而IE沒有那麼多內存分配給其他瀏覽器。如果你看看你擁有的那些行號或者用IE8開發者工具調試你的代碼,你應該得到你的答案。

如果它不是一個遞歸,它可能是一個循環,直到它耗盡時纔會繼續吃更多的內存。