"Переполнение стека в строке 0" в Internet Explorer

Я понимаю, что это не идеальное место, чтобы спросить об этом с точки зрения возможности поиска, но у меня есть страница, чей код JavaScript вызывает ошибки "Qaru in line 0", когда я смотрю на нее в Internet Explorer.

Проблема явно не в строке 0, а где-то в списке вещей, которые я пишу в документе. Все отлично работает в Firefox, поэтому у меня нет радостей Firebug и друзей, чтобы помочь в устранении неполадок.

Существуют ли для этого стандартные причины? Я предполагаю, что это, вероятно, ошибка Internet Explorer 7 или что-то совсем неясное, и мой Google-fu приносит мне немного радости в настоящее время. Я могу найти много людей, которые сталкивались с этим раньше, но я не могу найти, как они его решили.

Ответ 1

Вы можете отключить параметр "Disable Script Debugging" внутри обозревателя Internet Explorer и начать отладку с помощью Visual Studio, если это произойдет.

Я обнаружил, что это один из немногих способов диагностики некоторых из этих IE конкретных проблем.

Ответ 2

Недавно я столкнулся с этой проблемой и написал сообщение о конкретном случае в нашем коде, который вызывал эту проблему.

http://cappuccino.org/discuss/2010/03/01/internet-explorer-global-variables-and-stack-overflows/

Краткое резюме: рекурсия, проходящая через глобальный объект хоста, ограничена глубиной стека 13. Другими словами, если ссылка, которую использует ваш вызов функции (не обязательно сама функция), была определена в окне формы .foo = function, то рекурсия через foo ограничена глубиной 13.

Ответ 3

Ага!

У меня было событие OnError() в некотором коде, который устанавливал источник изображения в путь по умолчанию, если он не был найден. Конечно, если путь по умолчанию не найден, это вызовет обработчик ошибок...

Для людей, у которых есть аналогичная проблема, но не одно и то же, я полагаю, что причиной этого является, скорее всего, либо непрерывный цикл, обработчик событий, который запускает себя или что-то подобное, что бросает механизм JavaScript в спин.

Ответ 4

У меня была эта проблема, и я решил ее. В теге <%@ Page с именем MaintainScrollPositionOnPostback появился атрибут, и после его удаления ошибка исчезла. Я добавил его раньше, чтобы предотвратить прокрутку после каждой обратной передачи.

Ответ 5

Если вы пришли сюда, потому что у вас была проблема в ваших тестах на селен: IE не нравится By.id("xyz"). Используйте By.name, xpath или что-то другое.

Ответ 6

Также наличие smartNavigation = "true" вызывает это "

Ответ 7

Я установил проект по умолчанию и обнаружил следующее:

Проблема заключается в комбинации smartNavigation и maintainScrollPositionOnPostBack. Ошибка возникает только тогда, когда для обоих установлено значение true.

В моем случае ошибка была вызвана:

<pages smartNavigation="true" maintainScrollPositionOnPostBack="true" />

Любая другая комбинация отлично работает.

Кто-нибудь может это подтвердить?

Ответ 8

  • Свойства обозревателя
  • Инструменты
  • Параметры Интернета
  • Дополнительно
  • Раздел навигации
  • Нажмите > Отключить script отладка

    отображает уведомление о каждой ошибке script

  • войти
  • Вы будете улыбаться!

Ответ 9

Мой был "в строке 1", но...

У меня возникла эта проблема при использовании метода jQuery .clone. Я заменил их, создав объекты jQuery из строки html: $($(selector).html()).

Ответ 10

Я воспроизвел ту же ошибку в IE8. В одном из текстовых полей есть некоторые обработчики событий для замены недействительных данных.

$('.numbersonly').on("keyup input propertychange", function () {
    //code
});

При вводе данных в это текстовое поле было отображено сообщение об ошибке. Мы удалили событие "propertychange" из кода выше, и теперь он работает правильно.

P.S. возможно, это поможет кому-то

Ответ 11

Я не знаю, что вам сказать, но та же проблема возникла при сортировке таблицы и поисковой системе jQuery. Когда в таблице ничего не осталось, где вы ищете строку, например, вы также получаете эту ошибку. Даже в Google Analytics эта ошибка возникает часто.

Ответ 12

В моем случае у меня были две функции a() и b(). Первый вызов второй и второй вызывал первый:

var i = 0;
function a() { b(); }
function b() {
  i++; 
  if (i < 30) {
    a();
  }
}

a();

Я решил это с помощью setTimeout:

var i = 0;
function a() { b(); }
function b() {
  i++; 
  if (i < 30) {
    setTimeout( function() {
      a();
    }, 0);
  }
}

a();

Ответ 13

Это проблема с Java и Flash Player. Установите последнюю версию Java и Flash Player, и проблема будет решена. Если нет, то установите Mozilla Firefox, он автоматически установит необходимые обновления.