IE6 / 7/8 не хватает памяти? - PullRequest
16 голосов
/ 12 октября 2010

Сегодня я проводил несколько кросс-браузерных тестов на определенную функциональность и наткнулся на довольно изящную маленькую жемчужину.

В 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. Это на самом деле происходит при закрытом / открытом взаимодействии.

Кто-нибудь видел что-нибудь подобное раньше?

Редактировать : После дальнейших исследований это, похоже, не связано с фреймами. До сих пор копаю, но любые предложения будут оценены.

Ответы [ 2 ]

11 голосов
/ 13 октября 2010

Таким образом, оказалось, что проблема с IE и всем остальным обрабатывает вещи по-разному ... как обычно.

У меня есть функция, которую я использую, чтобы выдавать ошибку, и она рекурсивна по своему дизайну,Я хотел, чтобы ошибка отображалась в основном документе, а не в фрейме (который, к сожалению, широко используется на этом сайте).Суть моей функции заключается в следующем:

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

Это прекрасно работает в Chrome и Firefox.Он повторяет один уровень и выдает ошибку, отображаемую в главном окне, потому что, как только он попадает на верхний уровень, родитель сам становится.Однако, очевидно, в IE родитель окна никогда не является сам по себе.Таким образом, бесконечная рекурсия.

Оставайтесь с нами для решения.

Редактировать: Очевидно, это была проблема с использованием !== вместо !=.Когда я переключил его на !=, во второй раз (так как он запускается с iframe), window == parent оценивает значение true, но window === parent не ...

Что бы я нивозьму ...

Спасибо за вашу помощь, ребята.

0 голосов
/ 12 октября 2010

Может показаться, что вы тратите слишком много памяти на что-то, а в IE не так много памяти выделяется для чего-то такого :) Другие браузеры делают. Если вы посмотрите на те номера строк, которые у вас есть, или отладите свой код с помощью инструментов разработчика IE8, вы должны получить ответ.

Если это не рекурсия, это может быть цикл, который продолжает потреблять больше памяти, пока не иссякнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...