Blog.

Screen Wake Lock API

Nicolas Bello Camilletti
Nicolas Bello Camilletti
3 min read

Screen Wake Lock API

Es muy común que nuestros dispositivos se suspendan cuando pasa un corto tiempo en los que no detectan interacción del usuario y seguramente luchaste con esto en alguna oportunidad mientras creabas alguna aplicación que justamente no requería tanta interacción con los usuarios, sino, mas bien, que nuestros usuarios puedan leer/ver la pantalla por largos periodos de tiempo. Ejemplos típicos de este tipo de comportamientos son reproductores de multimedia o aplicaciones de cocina donde se muestran los pasos de una receta.

La API de Screen Wake Lock busca solucionar este problema en la web donde antes se requería crear una aplicación nativa, evitando que el dispositivo se suspenda.

Como se usa

A nivel de código, tenemos que llamar al método navigator.wakeLock.request() que nos va a devolver un objeto de tipo WakeLockSentinel. En caso de rechazarse el pedido, se lanzará una excepción que nos indicará el motivo, por lo que hay que hacer try/catch de esta llamada. Como buena práctica antes de llamar a la api, es recomendado verificar que exista navigator.wakeLock.

Podemos escuchar el evento de release del objeto WakeLockSentinel para detectar cuando se libera nuestro lock y aparte podemos leer la propiedad booleana released para ver el estado actual del mismo.

// The wake lock sentinel.
let wakeLock = null;

// Function that attempts to request a screen wake lock.
const requestWakeLock = async () => {
  try {
    wakeLock = await navigator.wakeLock.request();
    wakeLock.addEventListener('release', () => {
      console.log('Screen Wake Lock released:', wakeLock.released);
    });
    console.log('Screen Wake Lock released:', wakeLock.released);
  } catch (err) {
    console.error(`${err.name}, ${err.message}`);
  }
};

Liberando el lock

Algo importante es que podemos liberar el lock llamando al método release() del objeto WakeLockSentinel que obtuvimos de respuesta al hacer el lock.

// Request a screen wake lock…
await requestWakeLock();

// …and release it again after 5s.
window.setTimeout(() => {
  wakeLock.release();
  wakeLock = null;
}, 5000);

Conclusiones

La incorporación de esta API, sigue reduciendo la brecha que hay entre aplicaciones nativas y la web y nos permite generar nuevos escenarios en la web. Como vimos aparte es una API muy simple para usar por lo cual vale la pena tenerla en cuenta.

Algo no menor es que ya está disponible en los tres motores de navegador principales y pasa a ser Baseline Newly disponible a partir del 14 de mayo de 2024.


More Stories

Creating a next.js middleware to better handling localization

4 min read

Localization can be hard to handle in your web sites. Luckily for us there are more tools everyday. While working with next.js I ended up…

Nicolas Bello Camilletti
Nicolas Bello Camilletti

Adding a guest user to an Office 365 SharePoint site with JavaScript and Azure Functions

6 min read

We recently had a project where we needed to invite external users to an Office 365 SharePoint Site automatically when a Microsoft Flow was…

Nicolas Bello Camilletti
Nicolas Bello Camilletti