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

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

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

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


person glenatron    schedule 22.10.2008    source источник
comment
тошно, что у этого 10к просмотров.   -  person Sneakyness    schedule 23.12.2009
comment
Это действительно распространенное и общее сообщение об ошибке — оно может появляться по целому ряду причин и совершенно не объясняет себя. Если бы он сказал бесконечный цикл или что-то в этом роде, было бы намного проще понять, в чем причина.   -  person glenatron    schedule 24.12.2009
comment
иногда я не могу понять, почему вдруг один вопрос привлекает все внимание... блин :) или :(   -  person Suraj Chandran    schedule 24.05.2011
comment
Я почти уверен, что это внимание связано с тем, что это очень распространенное и ни в коей мере не говорящее само за себя сообщение об ошибке...   -  person glenatron    schedule 19.10.2011


Ответы (13)


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

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

person Mitchel Sellers    schedule 22.10.2008

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

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

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

person Ross Boucher    schedule 02.03.2010
comment
Очень интересный взгляд на корни проблемы. - person glenatron; 03.03.2010

Ага!

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

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

person glenatron    schedule 22.10.2008
comment
это было чем-то похоже на мою проблему. я не уверен, как произошла рекурсия, но у меня был отсутствующий ресурс (empty.html), используемый в каком-то iframe, а empty.html отсутствовал в одном из моих развертываний. я проверил свой журнал доступа на основе этого ответа, нашел 404 и добавил недостающий файл. вуаля! - person dmansfield; 31.07.2012

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

person massoud    schedule 01.12.2009
comment
Спасибо, это была и моя проблема. - person Marcelo; 15.06.2011

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

person devsnd    schedule 02.03.2012

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

person CDev    schedule 13.05.2010

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

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

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

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

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

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

person Tillito    schedule 04.02.2012
comment
smartNavigation устарела, поэтому вы должны использовать только mainScrollPositionOnPostBack. Это решило проблему для меня. - person Tillito; 04.02.2012
comment
Мои пользователи внезапно начали получать эту ошибку после того, как я добавил эти атрибуты в тег страницы, но только при использовании IE, поэтому я сам не сталкивался с этой проблемой. Не имея никакой подсказки, чтобы связать их вместе, я был полностью потерян для решения, пока не нашел этот ответ. - person kad81; 11.05.2012

  1. настройки интернета
  2. Инструменты
  3. Настройки интернета
  4. Передовой
  5. Раздел навигации
  6. Click > Disable script debugging

    display a notification about every script error

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

person Janaka senatilleke    schedule 10.12.2010
comment
Разве это не просто лечение симптома? - person Peter Mortensen; 24.05.2011
comment
и лечение симптома только у одного пациента, тогда как, возможно, миллионы из них не получают лечения. - person Kemal Dağ; 14.02.2013

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

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

person Muhd    schedule 22.01.2013
comment
Могли ли вы клонировать элемент, содержащий код, вызывающий clone? Это имело бы такой эффект, я думаю. - person glenatron; 22.01.2013

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

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

Сообщение об ошибке было показано при вводе данных в это текстовое поле. Мы убрали событие «изменение свойства» из кода выше, и теперь оно работает корректно.

P.S. может кому поможет

person Max    schedule 25.10.2013
comment
Как и в большинстве приведенных здесь примеров, это почти наверняка рекурсивный цикл — если ваше событие propertychange изменит свойство элемента, оно снова сработает, вызвав исключение именно такого типа. - person glenatron; 25.10.2013

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

person Community    schedule 27.01.2010
comment
Причиной ошибки обычно является незавершенный цикл или рекурсивный вызов, который просто перегружает механизм Javascript, но это может произойти по-разному. - person glenatron; 27.01.2010

В моем случае у меня было две функции 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();
person lord_t    schedule 20.12.2012

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

person Manisha    schedule 10.08.2010
comment
Javascript, а не Java. И при чем здесь флеш? - person Cinder; 23.02.2013