【问题标题】:prevent safari from sleep using javascript使用javascript防止safari进入睡眠状态
【发布时间】:2016-11-06 20:14:42
【问题描述】:

我正在实现一个 javascript 计时器,计时器在 iframe 中加载,并且该计时器还以特定间隔播放一些音频文件,基本上它是用于例行练习,所以说 10 秒有第一个练习,然后一分钟是第二个第三个持续 2 分钟,以此类推。

随着练习的时间结束并且下一个练习出现,我会更改该特定练习的音频,依此类推。我想要的是防止浏览器在手机(安卓、iOS)、笔记本电脑等各种模式下进入睡眠状态,直到计时器运行为止。

我已经使用了 2 种 ios 解决方案来重新加载页面,而对于其他解决方案,无论是 android 还是笔记本电脑,我正在尝试视频,如 here 所述。

我最后检查的代码是

var ua = {
  Android: /Android/ig.test(navigator.userAgent),
  // iOS: /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent)
  iOS:/iPhone|iPad|iPod/i.test(navigator.userAgent)
};

<script type="text/javascript" src="js/sleep.js"></script>

if (ua.iOS) {
  preventIosSleep = setInterval(function(){
    window.top.location.href = '/';
    setTimeout(function(){
      try {
        window.top.stop();
      } catch (exception) {
        document.execCommand('Stop');
      }
    }, 0);
  }, 10000);
} else {
  sleep.prevent();
}

// and when releasing the things
if (ua.iOS) {
  clearInterval(preventIosSleep);
} else {
  sleep.allow();
}

sleep.js 取自上述链接。已经尝试了大约一周的时间。此解决方案适用于除 MAC 上的 safari 之外的所有浏览器。谁能告诉我如何让 safari 浏览器不进入睡眠模式。

【问题讨论】:

  • 你不能......你任由浏览器摆布。
  • 您的“检查内容的最终代码”已将 AppleWebKit 正则表达式注释掉,因此 ua.iOS 甚至不会在 macOS 上检测到 Safari。您是否至少确认可以在 macOS 上检测到 Safari?

标签: javascript safari


【解决方案1】:

过去,您可以进行一些黑客攻击,例如在页面上添加音频标签或在隐藏的 iframe 中重新加载 URL。但从 iOS 7 开始,这些都不起作用。唯一可行的解​​决方案是创建一个使用 UIWebView 的应用程序。

如果您有兴趣,以下是更多信息:https://stackoverflow.com/a/7477438/1640090

【讨论】:

  • 所以总的来说让我们这样结束是不可能的。这样如果其他人尝试,他们可以得到一些帮助。
【解决方案2】:

如果您正在寻找设备级别控制,我建议您创建一个 cordova 应用程序。我相信你希望在浏览器中完成的事情是 Apple 积极阻止的。可能是出于电池寿命和/或设备安全原因。

如果你走那条路,你可以使用: https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin

希望对你有帮助。

【讨论】:

  • 如果你可以检查我的问题,事情在设备上运行,但在 mac safari 上运行不正常。所以,如果你能帮忙的话。
猜你喜欢
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2010-10-12
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2017-04-10
相关资源
最近更新 更多