Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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, вы должны получить ответ.

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