网页在iOS和OSX上的Safari中重新加载时冻结



我使用的是iOS 15.3.1的iPhone 11 Pro。

我想弄清楚为什么在访问我的网站时,Safari在加载页面时大部分时间都处于冻结状态。有时我第一次访问页面时会加载它,但在重新加载时,它基本上会冻结,没有任何交互。

当我将iPhone连接到Mac并使用Safari检查器连接到iPhone上的网页时,检查器在所有屏幕上基本上都是空白的。如果我去";元素";选项卡,没有显示任何内容。如果我去";控制台";选项卡并尝试执行一些Javascript,当我按下回车键时,什么也没发生。

在OSX上,我可以看到类似的行为,只是我可以在访问页面之前打开检查器。在这种情况下,当它冻结时,我可以在";元素";选项卡,但仅此而已。我试图在检查器中进行的任何交互都不会导致任何结果。

我有点不知所措。对于这样一个流行的操作系统/浏览器,开发体验怎么会如此糟糕,我该如何解决检查器本身不工作的问题?除了Safari,我无法在任何东西上复制这种冻结。

明确我的问题:

当Safari中的网页处于检查器不再与网页交互的状态时,您的调试过程是什么

我对我的应用程序进行了广泛的分而治之,注释了顶级代码,并逐步取消注释,直到找到导致冻结的确切行。

在onfocus事件处理程序函数中调用HTMLInputElement.setSelectionRange()似乎导致Safari中出现无限同步循环,也许Safari在调用该函数时会同步模糊输入并重新聚焦。在页面重新加载时,Safari试图自动将代码集中在输入上。这至少是我的猜测,删除setSelectionRange()解决了冻结问题。

幸运的是,冻结相当一致,所以分而治之的方法奏效了。不幸的是,检查员真的应该做好自己的工作,发现页面挂起的事实,并告诉我当Javascript被迫停止时,哪个函数代码的执行中断了,就像Chrome或Firefox一样。

如果有人对在Safari中调试这类问题有任何更好的想法,除了等效于短路测试的编程之外,我很乐意接受这个答案。

最新更新