IE6/7/8 Из памяти?
Сегодня я тестировал несколько кросс-браузеров на определенную функциональность и сталкивался с довольно изящной маленькой жемчужиной.
В IE8: Out of memory at line: 99
В IE7: Out of memory at line: 100
В IE6: Qaru at line: 101
Из того, что я смог вычислить, большую часть времени, когда появляются эти сообщения, возникает проблема с наличием массива, в котором количество элементов больше, чем 65,535
. Тем не менее, я не считаю, что этот вопрос здесь.
Функцией, о которой идет речь, является действие из iframe
"закрытия" текущего iframe
и "открытие" другого с помощью jQuery. Это фактически происходит при закрытии/открытии взаимодействия.
Кто-нибудь видел что-нибудь подобное раньше?
Изменить. При дальнейшем исследовании на самом деле это не похоже на фреймы. Все еще рытье, но любые предложения будут оценены.
Ответы
Ответ 1
Так получилось, что проблема с IE и все остальное обрабатывает вещи по-другому... как обычно.
У меня есть функция, которую я использую, чтобы выбросить ошибку, и она рекурсивна по дизайну. Я хотел, чтобы ошибка отображалась в основном документе, а не iframe (который, к сожалению, широко используется на этом сайте). Суть моей функции такова:
myClass.myErrorFunc = function ( msg ) {
if ( parent !== window ) {
parent.myClass.myErrorFunc( msg );
} else {
// display the error
}
}
Это работает GREAT в Chrome и Firefox. Он повторяет один уровень и отображает ошибку в главном окне, потому что как только он попадает на верхний уровень, родитель сам. По-видимому, в IE, однако, родитель окна НИКОГДА не является сам. Таким образом, бесконечная рекурсия.
Оставайтесь с нами для решения.
Изменить: По-видимому, это проблема с использованием !==
вместо !=
. Когда я переключил его на !=
, второй раз (как это выполняется с iframe
), window == parent
оценивает значение true, но window === parent
не...
Как бы то ни было, я возьму его...
Спасибо за помощь ребятам.
Ответ 2
Казалось бы, вы слишком много занимаетесь памятью, и у IE не так много памяти для такого рода вещей:) Другие браузеры. Если вы посмотрите на те номера строк, которые у вас есть или отлаживаете свой код с помощью инструментов разработчика IE8, вы должны получить ответ.
Если это не рекурсия, это может быть цикл, который продолжает потреблять больше памяти, пока не закончится.