У меня есть сайт, который внезапно начал разбивать интернет-проводник.Мой сайт продолжает сбой IE, не может отлаживать
Веб-сайт загружает и запускает javascript, но где-то там техника взрывается. Я даже не получаю ошибку сценария, он просто падает. Я попытался вручную пройти через каждую строку js со встроенным отладчиком, но тогда, конечно, проблема не возникает.
Если я решил отлаживать приложение, когда он выходит из строя, я вижу следующее сообщение.
Необработанное исключение в 0x6c5dedf5 в iexplore.exe: 0xC0000005: Место для обнаружения нарушения доступа 0x00000090.
топ-5 элементов в стеке вызовов выглядит следующим образом
Vgx.dll! 6c5dedf5()
[Фреймы ниже могут быть неправильными и/или отсутствует, никакие символы, загруженные для Vgx.dll]
Vgx.dll! 6c594d70()
Vgx.dll! 6c594f63()
Vgx.dll! 6c595350()
Vgx.dll! 6c58f5e3()
mshtml.dll! 6f88dd17()
VGX.dll похоже, является частью средства визуализации vml, и я фактически использую VML. Я не удивлен, потому что у меня было так много проблем с vml, атрибуты должны быть установлены в определенном порядке, иногда вы не можете устанавливать атрибуты, когда у вас есть элементы, прикрепленные к dom или наоборот (все недокументированные кстати), но затем проблемы как правило, могут быть воспроизведены при отладке, но не сейчас :(
проблема также происходит не в плагине режиме
есть ли лучший подход, чем метод проб и ошибок, чтобы решить эту проблему
Edit:.? Добавление консоли, выводящей каждую подозрительную модификацию в DOM, вызвало проблему только иногда (консоль также реализованный в javascript на той же странице, я могу видеть результат даже после сбоя, поскольку окно все еще видно). По-видимому, это похоже на какое-то состояние гонки.
Мне удалось отследить его еще дальше, и это происходит, когда вы удаляете объект из DOM слишком быстро после его добавления. (скорее всего, только для vml-элементов с каким-то специальным атрибутом, больше не пытались) И его нельзя исправить добавлением мертвого цикла перед removeChild (в любом случае это довольно плохое решение), страница должна отображаться браузер один раз после addChild, прежде чем вы сможете вызвать removeChild. sigh
Просто шучу - но, ну, вы могли бы быть в состоянии обработать (другое) использовать для IE от этого. Я имею в виду, что вы заканчиваете чтение из некоторого места памяти. Может быть, вы можете заставить это сделать что-то действительно плохое. Кроме того, полностью исправленные и обновленные окна/IE не должны вылетать с любого веб-сайта, независимо от того, насколько неправильным является ваш код. Может быть, есть место, чтобы сообщить об этом? – zerm
Пришлите мне репрографическую страницу или URL-адрес; Я рад, что посмотрю! (ericlaw @ microsoft). Благодаря! – EricLaw
FYI, в следующий раз установите сервер символов на сервер Symbol Server, чтобы получить лучший стек вызовов: http://msdn.microsoft.com/en-us/library/b8ttk8zy%28v=vs.80%29.aspx –