【问题标题】:How can I prevent iPhone (including iOS 7) from going to sleep in HTML or JS?如何防止 iPhone(包括 iOS 7)在 HTML 或 JS 中休眠?
【发布时间】:2015-11-07 18:06:43
【问题描述】:

我正在尝试编写一些代码来让手机保持活动状态而不是在网页上进入睡眠状态。

在我的搜索中,我发现了这个帖子:Prevent iOS mobile safari from going idle / auto-locking / sleeping?

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

Google 最新的互动音乐视频Just A Reflektor 似乎正在防止手机锁定,他们的JS here 引用了 preventSleepIos 函数。

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

谢谢!

【问题讨论】:

  • 欢迎来到 Stack Overflow!有趣的。关于preventSleepIos,你发现了什么?
  • 嗨@amp,我不能说我足够熟练,可以分解缩小的代码来弄清楚它在做什么。
  • 不是有非缩小版吗?

标签: javascript html iphone ios auto-lock


【解决方案1】:

如果您通过 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 上测试过了。你可以test it yourself on jsBin

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

【讨论】:

  • 你好!这似乎对我不起作用..新/页面加载之前没有停止..
  • 嘿——我正在阅读本教程,因为我正在编写一个 API 来将手机变成没有应用程序的控制器,而没有意识到谷歌做了同样的事情。无论如何,可以在 ios safari 中使用,但在 chrome 中,它们会让你连续按住一个按钮以保持清醒。非常不舒服。
  • 嗨,我已经在我的网站中实现了这个“hack”,它可以在 safari 中运行,我还添加了 chrome 的 hack(仅在 android 上测试):只需向 touchstart 添加一个事件监听器(在移动设备,您无法自动播放视频)并创建静音视频。这会停止 chrome 上的睡眠计时器。这是我的脚本:static.pin-point.io/js/os/prevent-sleep.js
  • @loulian Alexeev 我正在尝试为 ios 实现您的脚本。只是你写的最初的帖子。 30 秒后,新窗口打开。还有你最后在哪里定义睡眠?
  • 如果 document.hidden 为真,我会考虑阻止位置请求,否则停止请求似乎不起作用。
【解决方案2】:

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

据我所知,防止iOS进入休眠的方法只有几种,其中一种是制作一个玩具应用程序,在iOS中一遍又一遍地获取服务,另一种是设置application.idleTimerDisabled = YES,但这两种解决方案都超出了 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);
    }

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-01-20
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多