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

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

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

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

13 ответов


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

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


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

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

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


Аха!

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

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


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


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


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


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

проблема сочетание smartNavigation и maintainScrollPositionOnPostBack. Ошибка возникает только в том случае, если оба параметра имеют значение true.

в моем случае, ошибка была произведена:

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

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

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


  1. Свойства Обозревателя
  2. инструменты
  3. Свойства обозревателя
  4. дополнительно
  5. раздел навигации
  6. нажмите > отключить отладку скриптов

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

  7. вход
  8. вы будете улыбаться !

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

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


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

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

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

P. S. Может это поможет кому-то


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


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

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();

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