16

我正在尝试编写一些代码来让手机保持活力而不是在网页上睡觉。

在我的搜索中,我发现了这篇文章:防止 iOS 移动 Safari 闲置/自动锁定/休眠?

但是循环播放音频文件似乎不再使 MobileSafari 保持活动状态并防止手机锁定。虽然强制页面每 30 秒刷新一次有效,但我需要原始页面保持打开状态。

Google 最新的交互式音乐视频Just A Reflektor似乎正在阻止移动设备锁定,他们的JS 在这里引用了 preventSleepIos 函数。

我能做些什么来防止 iOS 入睡?

谢谢!

4

2 回答 2

18

如果你通过http://jsbeautifier.org/运行缩小的脚本,你就会知道这个 hack 是如何工作的。

hack 的思路如下:如果在 safari 中请求新页面,则 ios 设备将重置睡眠超时。

知道了这一点,我们可以设置一个间隔,每 30 秒左右请求一个新页面:

iosSleepPreventInterval = setInterval(function () {
    window.location.href = "/new/page";
}, 30000);

现在我们需要停止请求,这样页面就不会被重定向:

iosSleepPreventInterval = setInterval(function () {
    window.location.href = "/new/page";
    window.setTimeout(function () {
        window.stop()
    }, 0);
}, 30000);

现在每 30 秒会有一个页面请求,因此 ios 设备不会进入睡眠状态,并且请求将被取消,因此您不会离开页面。

注意:我将此代码用于“/new/page”:

sleep(10);exit;

这个 hack 已经在 iOS 6 和 iOS 7 上测试过了。你可以在 jsBin 上自己测试

注意 2:Android 使用不同的 hack 来防止设备进入睡眠状态。

于 2013-11-03T13:11:47.533 回答
-4

您将不得不向服务器发出请求,不幸的是,这对于严格的 HTML 或 JS 是不可能的。这两种都是前端脚本语言,这意味着一旦加载了 DOM,使用普通 HTML 和 CSS 操作 DOM 只会影响前端。

据我所知,防止iOS进入休眠的方法只有几种,其中一种是制作一个玩具应用程序,一遍又一遍地在iOS中获取服务,另一种是设置application.idleTimerDisabled = YES,但两者都这些解决方案中的一部分超出了 Web 前端技术的范围。

如果您想防止会话通过 Web 应用程序丢失,您可以编写一个廉价的服务器端函数来每隔一段时间 ping 服务器的时间,以保留用户的会话。

使用 javascript 和 PHP 的示例:

function cd(){
   var alerttime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (1 * 60)));  ?>"
   var extratime = "<?php echo date('h:i:s', (strtotime($_SESSION['ordertime']) + (2 * 60)));  ?>";
    redo();
}    

function getTime(){
    currenttime = "<?php echo date('h:i:s', time()); ?>";

   var cd = setTimeout("getTime()",1000);
    }
于 2013-09-19T22:09:06.243 回答