注意/请使用Safari的“添加到主屏幕”通过共享按钮将网络应用程序添加到主屏幕.在Safari中运行页面不会导致上述问题.
<html> <head> <Meta name="apple-mobile-web-app-capable" content="yes" /> <title>Test</title> <script> var tim; function go() { tim = window.setInterval(action,1000); } function action() { document.getElementById('x').innerHTML = new Date().getTime().toString(); } </script> </head> <body onload="go()"> <div id="x"></div> </body> </html>
解决方法
其他事情在睡眠模式后断开:
-webkit-transition不透明度导致不可选区域
> worker.post键盘打开时调用的消息永久地杀死所有WebWorkers
>窗口弹跳/平移可以杀死所有WebWorkers.
> overflowchange / resize事件不再工作.你需要修改任何依赖于它们的逻辑.
做一个半工作的解决方案:
>覆盖setTimeout / setInterval / requestAnimationFrame / clearInterval / clearTimeout / cancelAnimationFrame.所有这些功能都需要postMessage到webworker,webworker将相应地执行setTimeout / setInterval.您可能需要为这些功能设置暂停的手段,但我不是100%必要的.
>覆盖XMLHttpRequest,以便在发送调用时,请求实际上是在Webworker上执行的.
>为所有Web工作者创建一个暂停机制,以便主线程可以确定所有Web工作人员何时刷新其消息(基本上,在键盘启动时,基本上需要防止postMessage在任何工作人员上被调用).
>防止键盘弹出可编辑的元素.检测到可编辑元素上的点击/点击事件后,您需要手动调用焦点功能.
>覆盖打开键盘的可编辑元素的聚焦功能.焦点现在会调用暂停工作者的功能.所有工作人员暂停后,调用浏览器实现焦点.
>将focusout事件侦听器添加到可编辑元素,以便调用resume worker函数.
我的github有一个半抽象的版本可供他人使用.我们使用github版本在我们相当复杂/大而重的动画ajax依赖应用程序与很少的问题.