Safari - iPhone - WebApp因未知原因崩溃

时间:2017-02-07 12:39:34

标签: javascript dom crash mobile-safari shadow-dom

我目前正在开发一个新的前端javascript框架。在过去的几天里,我重构了DOM更新程序,并且很少有其他代码看起来更好,并且当DOM元素在内存中保持分离时,可以摆脱一些内存泄漏。

不幸的是,iPhone和iPad 2上的Safari现在因未知原因而开始崩溃(我正在测试的其他浏览器都很好

窗口:    IE10emu / 11,edge 14,chrome,opera,FF - 最新版本

机器人:    Webview 4,38,chrome,opera,ff - 最新版本

并且没有问题。)

我尝试使用Windows上的Chrome和ios_webkit_debug_proxy通过远程调试对其进行调试,但遗憾的是它没有向我显示任何内容。

当我使用主DOM文档或使用shadow DOM文档时,我几乎感到很有问题。

奇怪的是:当我将日志切换到控制台时(有大量的日志记录 框架中的功能)仅适用于DOM更新程序模块并使用远程调试功能,一切似乎都运行良好(当然除了它很慢)并且它不再崩溃,所以我甚至无法看到它何时崩溃。

由于我没有Mac甚至Apple开发许可证,我正在寻找拥有Mac并拥有一些开发经验的人的帮助。我想知道是否有可能以某种方式调试这些意外的崩溃,或者至少是否有可能得到它崩溃的原因(某种类型的safari日志?) - 内存泄漏,内存不足......无论什么可以帮助我做一些解决方法。

以前的版本运行正常。与之相比,我没有做任何特别的事情,特别是在操作DOM时,但是代码被重新排序,放在更多的函数/方法中并进行了一些优化。

可在此处找到工作(更少或更多:)版本:http://ajsfw.azurewebsites.net/

有问题的版本可以在这里找到:http://ajsdoc.azurewebsites.net/关闭日志(我可以在必要时打开)

可在此处找到工作代码的来源:https://github.com/atomsoftwarestudios/ajsdoc

如果有必要,我也可以提供新的,有问题的来源,但我不想将它们推到主要位置,直到它被修复为止,所以我可以将它分叉或作为压缩包发送。问题是它是一个视觉工作室解决方案,这时与Mac有点不兼容:)但我很确定我们可以找到一种方法。

代码已经很复杂了,我可能需要在我身边进行一些合作才能找到正在发生的事情。

希望你能提供帮助。

更新(已解决问题):

在添加/删除" ontouchmove"事件听众。

我正在为模板使用多个HTML文档(document.implementation.createHTML),并将主文档(window.document)用作托管渲染目标。当我将模板加载到" shadow dom"使用innerHTML分配给模板标签的ontouch ...属性引起了问题所以在我设置模板innerHTML之前我将其重命名,稍后在渲染到主DOM时,我使用原始名称addEventListener。

奇怪的是:在重构之前,事件监听器在模板" shadow DOM"中注册并不重要。但我还添加了一些新功能,因此其中一个可能会导致它。难以调试,尤其是在浏览器崩溃时。重要的是,即使代码中的复杂程度很小,它也会再次像魅力一样。

结果可以在之前提供的链接上看到,ajsdoc ...记录如此慢(与IE10 / 11一样慢),ajsfw如果未经优化(未最小化)发布而没有记录如此之快。

如果sbdy被捕,则提交固定来源

2 个答案:

答案 0 :(得分:0)

所以我终于从Safari获得了一些崩溃日志。

在添加" ontouchmove"事件监听器。现在我必须弄清楚为什么它在以前的版本中没有崩溃并在不同的时间注册它。

答案 1 :(得分:0)

因此,只是总结问题所在,我使用多个HTML文档(document.implementation.createHTML)作为模板,主文档(window.document)作为托管渲染目标。当我将模板加载到"影子Dom"使用innerHTML分配给模板标签的ontouch ...属性引起了问题所以在我设置模板innerHTML之前我将其重命名,稍后在渲染到主DOM时,我使用原始名称addEventListener。

奇怪的是:在重构之前,事件监听器在模板" shadow DOM"中注册并不重要。但我还添加了一些新功能,因此其中一个可能会导致它。难以调试,尤其是在浏览器崩溃时。重要的是,即使代码中的复杂性很小,它也会像魅力一样。