У меня есть веб-сайт, на котором внезапно произошел сбой Internet Explorer.
Веб-сайт загружается и запускает выполнение javascript, но где-то там взрывается оборудование. Я даже не получаю ошибку скрипта, просто вылетает. Я пытался вручную просмотреть каждую строку js с помощью встроенного отладчика, но тогда, конечно же, проблемы не возникло.
Если я выберу отладку приложения, когда оно выйдет из строя, я вижу следующее сообщение.
Необработанное исключение в 0x6c5dedf5 в iexplore.exe: 0xC0000005:
[Фреймы ниже могут быть неправильными и / или отсутствовать, символы для VGX.dll не загружены]
VGX.dll! 6c594d70 ()
VGX.dll! 6c594f63 ()
VGX.dll! 6c595350 ()
VGX.dll! 6c58f5e3 ()
mshtml.dll! 6f88dd17 ()
VGX.dll кажется частью средства визуализации vml, и я фактически использую VML. Я не удивлен, потому что у меня было так много проблем с vml, атрибуты должны быть установлены в определенном порядке, иногда вы не можете установить атрибуты, когда у вас есть элементы, прикрепленные к dom, или наоборот (все недокументированное btw), но тогда проблемы обычно можно воспроизвести при отладке, но не сейчас: (
Проблема также возникает в режиме без плагинов.
Есть ли лучший подход, чем метод проб и ошибок, для решения этой проблемы?
Изменить: Добавление консоли, выводящей все подозрительные изменения в DOM, приводило к тому, что проблема возникала только иногда. (консоль также реализована на javascript на той же странице, я могу видеть вывод даже после сбоя, поскольку окно все еще видно) По-видимому, это какое-то состояние гонки.
Мне удалось отследить это еще больше, и кажется, что это происходит, когда вы слишком быстро удаляете объект из DOM после того, как он только что был добавлен. (скорее всего, только для vml-элементов с каким-то специальным атрибутом, дальше не пробовал) И это нельзя исправить, добавив мертвый цикл перед removeChild (все равно довольно плохое решение), страницу нужно отрендерить браузер один раз после addChild, прежде чем вы сможете вызвать removeChild. sigh