我可以阻止手机在网页上睡觉吗?

set*_*set 12 javascript iphone html5 android sleep

在应用程序中,我可以使用http://developer.android.com/reference/android/os/PowerManager.WakeLock.html, 但有没有办法让网页运行,防止入睡?如果它至少在android上运行会很好.

Ven*_*ryx 8

您可以使用:https : //github.com/richtr/NoSleep.js

在任何 Android 或 iOS 网络浏览器中防止显示睡眠并启用唤醒锁定。

请注意,该库在某些平台/浏览器上存在一些可靠性/性能问题。用户已找到问题评论和拉取请求中列出的解决方案,但由于 repo 所有者当前似乎不活跃,因此尚未添加它们。

建议您在生产中使用之前检查这些拉取请求(和/或问题)是否有潜在的改进。


And*_*kyi 7

在您的页面上播放假循环视频或音频

您可以使用这个简单示例将带有虚假数据的循环视频添加到您的页面并防止移动设备进入睡眠状态:

// Create the root video element
var video = document.createElement('video');
video.setAttribute('loop', '');
// Add some styles if needed
video.setAttribute('style', 'position: fixed;');

// A helper to add sources to video
function addSourceToVideo(element, type, dataURI) {
    var source = document.createElement('source');
    source.src = dataURI;
    source.type = 'video/' + type;
    element.appendChild(source);
}

// A helper to concat base64
var base64 = function(mimeType, base64) {
    return 'data:' + mimeType + ';base64,' + base64;
};

// Add Fake sourced
addSourceToVideo(video,'webm', base64('video/webm', 'GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA='));
addSourceToVideo(video, 'mp4', base64('video/mp4', 'AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAAG21kYXQAAAGzABAHAAABthADAowdbb9/AAAC6W1vb3YAAABsbXZoZAAAAAB8JbCAfCWwgAAAA+gAAAAAAAEAAAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIVdHJhawAAAFx0a2hkAAAAD3wlsIB8JbCAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAIAAAACAAAAAABsW1kaWEAAAAgbWRoZAAAAAB8JbCAfCWwgAAAA+gAAAAAVcQAAAAAAC1oZGxyAAAAAAAAAAB2aWRlAAAAAAAAAAAAAAAAVmlkZW9IYW5kbGVyAAAAAVxtaW5mAAAAFHZtaGQAAAABAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAAEcc3RibAAAALhzdHNkAAAAAAAAAAEAAACobXA0dgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAIAAgASAAAAEgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj//wAAAFJlc2RzAAAAAANEAAEABDwgEQAAAAADDUAAAAAABS0AAAGwAQAAAbWJEwAAAQAAAAEgAMSNiB9FAEQBFGMAAAGyTGF2YzUyLjg3LjQGAQIAAAAYc3R0cwAAAAAAAAABAAAAAQAAAAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAFHN0c3oAAAAAAAAAEwAAAAEAAAAUc3RjbwAAAAAAAAABAAAALAAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQAAAABMYXZmNTIuNzguMw=='));

// Append the video to where ever you need
document.body.appendChild(video);

// Start playing video after any user interaction.
// NOTE: Running video.play() handler without a user action may be blocked by browser.
var playFn = function() {
    video.play();
    document.body.removeEventListener('touchend', playFn);
};
document.body.addEventListener('touchend', playFn);
Run Code Online (Sandbox Code Playgroud)


Luc*_*ior 6

您可以使用Wake Lock Web API(检查支持)

https://web.dev/wakelock/

  • @rejnok - iOS 从 16.4(2023 年 3 月发布)开始支持它。但有一个已知的错误,它仅适用于常规网站,不适用于保存到主屏幕的“网络应用程序”。截至 iOS 17.0.1(2023 年 9 月发布),该错误尚未修复 - 自上次有人说该错误尚未生效以来的 5 周内,我尚未测试该错误是否已修复。此外,Firefox 还不支持它。 (3认同)
  • 现在(2021):仅在 Chrome/Edge/Opera 中受支持,在 Firefox/Safari(iOS、MacOS)中不受支持...没有其他方法可以通过手动错误修复来尝试 NoSleep.js... (2认同)

Sve*_*ing 5

在应用程序中,您可以通过多种方式进行操作,但我想您的意思是仅在移动网页上,即可通过Android在任何浏览器中查看。对于普通的HTML / Javascript /等,我真的非常怀疑。

它实际上可能是可能使用Flash(上支持Flash的手机使用插件启用),但是,在特定情况下,至少。我之所以这样说是因为,在未经WAKE_LOCK许可的测试应用中,将此swf文件加载到WebView中在某些设备上导致以下异常:

java.lang.SecurityException:用户#####或当前进程都没有android.permission.WAKE_LOCK

但是,即使这样做确实可行,也可能会导致崩溃,而没有WAKE_LOCK权限的应用程序或浏览器将会崩溃。这可能是由于Adobe Flash Player插件中的错误代码所致,而不是任何有意功能。