Nin*_*ino 7 javascript crash debugging internet-explorer vml
我有一个网站,突然开始崩溃Internet Explorer.
网站加载并开始执行javascript,但在那里机器爆炸.我甚至没有得到脚本错误,它只是崩溃.我试图用内置的调试器手动遍历每一行js,但当然问题不会发生.
如果我选择在崩溃时调试应用程序,我会看到以下消息.
iexplore.exe中0x6c5dedf5处的未处理异常: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或反之亦然(一切没有文档btw)但然后问题通常可以在调试时重现,但现在不能:(
没有插件模式也会出现此问题.
有没有比试错更好的方法来解决这个问题?
编辑: 添加控制台输出每个可疑的修改到DOM使得问题有时只发生.(控制台也在同一页面上的javascript中实现,我甚至可以在崩溃后看到输出,因为窗口仍然可见)显然它似乎是某种竞争条件.
我设法进一步跟踪它,并且它似乎发生在刚刚添加后从DOM中删除对象太快.(最有可能只针对具有某些特殊属性的vml元素,没有进一步尝试)并且无法通过在removeChild前面添加一个死循环来修复它(无论如何都是非常糟糕的解决方案),页面必须由浏览器一旦在addChild之后,你可以调用removeChild.叹
停止使用 VML?
如果您在 IE 中需要的东西确实无法通过移动、缩放、裁剪和替换图像来完成,那么请考虑使用 Flash、Silverlight 或类似工具。
如果您的生活依赖于 VML,那么请尽可能多地阅读其他人的经验,这可能会简化试错方法。