如何在屏幕解锁之后在iOS8网络应用程序上恢复JavaScript定时器?

在iOS8上,这个 HTML5网络应用程序在屏幕锁定后不会恢复js计时器,然后如果webapp处于活动状态并从主屏幕图标启动,则会解锁.在iOS7上,定时器会在这种情况下继续.我需要定时器在屏幕解锁后继续 – 任何提示来实现?

注意/请使用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>

解决方法

我们结束的解决方案并没有解决IOS8中睡眠模式后的所有破坏功能,而只是ajax请求/ setTimeout / setInterval / requestAnimationFrame及其各自的清除功能.

其他事情在睡眠模式后断开:

-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依赖应用程序与很少的问题.

https://github.com/TaDaa/IOS8-FIX

以上是来客网为你收集整理的如何在屏幕解锁之后在iOS8网络应用程序上恢复JavaScript定时器?全部内容,希望文章能够帮你解决如何在屏幕解锁之后在iOS8网络应用程序上恢复JavaScript定时器?所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。