iOS11 JavaScript 中的低功耗模式检测?

问题描述 投票:0回答:6

是否有 JavaScript API 可以检测 iOS 11 Safari 的低功耗模式? 我还没有找到有关该主题的任何信息。

javascript ios safari
6个回答
11
投票

完成此操作的解决方法是:

将视频(隐藏)放入网页中并“打开”自动播放, 然后检测该视频的“暂停”事件。 每当调用它时,“电源模式就会打开”。

这是脚本:

const videoElement = document.getElementById('ID_of_video');
    videoElement.addEventListener('suspend', () => {
        // suspend invoked
        // show play button
        // iphone is in low power mode
    });

    videoElement.addEventListener('play', () => {
        // video is played
        // remove play button UI
        // iphone is not in low power mode
    });

您还可以在这里阅读说明:低功耗模式开启时播放视频


7
投票
.catch((error) => {
  if (error.name === "NotAllowedError") {
     //low power mode
}

我在同样的概念上苦苦挣扎,一个有用的链接被证明是这个浏览器检查:https://video-dev.github.io/can-autoplay/

结果:视频静音(错误“NotAllowedError”:当前上下文中的用户代理或平台不允许该请求,可能是因为用户拒绝了权限。

所以我现在有一个承诺,检查视频是否正在播放,是否很棒。否则我会捕获 NotAllowedError,似乎每次都有效。


6
投票

iOS 上的 Safari 不支持 访问低电量模式设置的状态(甚至不支持访问电池电量)。


4
投票

就像“挂起”事件建议一样,使用具有

autoplay loop muted
属性的隐藏视频,然后在安装视频时监听播放事件,如下所示:

testVideo
    .play()
    .then(() => {})
     .catch((error) => {
        //Do something like adding controls to allow user to manually play
    });
});

这是截至 2022 年 3 月的解决方案,因为浏览器不会触发自动播放取消的挂起事件。


3
投票

对于iOS 16 Safari,可以通过检查

setInterval
的实际间隔来检测“低功耗模式”(或者说省电模式),因为累积延迟[^1]效应发生在低功耗模式下。

对于桌面 Chromium 109,可以通过检查

requestAnimationFrame

的帧速率来检测节能模式(或称省电模式)

查看在线演示:

[^1]:累积延迟意味着实际平均间隔明显大于给定间隔


0
投票

这是一个可行的解决方案(在 iPhone 上测试): https://codesandbox.io/s/low-power-mode-detection-in-javascript-for-ios-0j4sfv

© www.soinside.com 2019 - 2024. All rights reserved.