docs.rodeo

MDN Web Docs mirror

Window: beforeinstallprompt event

{{APIRef}} 

The beforeinstallprompt event fires when the browser has detected that a website can be installed as a Progressive Web App.

There’s no guaranteed time this event is fired, but it usually happens on page load.

The typical use for this event is when a web app wants to provide its own in-app UI inviting the user to install the app, rather than the generic one provided by the browser. This enables the app to provide more context about the app, explaining to the user why they might want to install it.

In this scenario, the handler for this event will:

When the user uses the in-app installation UI to install the app, the in-app installation UI calls the {{domxref("BeforeInstallPromptEvent.prompt()", "prompt()")}}  method of the retained BeforeInstallPromptEvent object to show the installation prompt.

Syntax

Use the event name in methods like {{domxref("EventTarget.addEventListener", "addEventListener()")}} , or set an event handler property.

addEventListener("beforeinstallprompt", (event) => {});

onbeforeinstallprompt = (event) => {};

Event type

A {{domxref("BeforeInstallPromptEvent")}} . Inherits from {{domxref("Event")}} .

{{InheritanceDiagram("BeforeInstallPromptEvent")}} 

Event properties

Inherits properties from its parent, {{domxref("Event")}} .

Event methods

Examples

In the following example an app provides its own install button, which has an id of "install". Initially the button is hidden.

<button id="install" hidden>Install</button>

The beforeinstallprompt handler:

let installPrompt = null;
const installButton = document.querySelector("#install");

window.addEventListener("beforeinstallprompt", (event) => {
  event.preventDefault();
  installPrompt = event;
  installButton.removeAttribute("hidden");
});

When clicked, the app’s install button:

installButton.addEventListener("click", async () => {
  if (!installPrompt) {
    return;
  }
  const result = await installPrompt.prompt();
  console.log(`Install prompt was: ${result.outcome}`);
  installPrompt = null;
  installButton.setAttribute("hidden", "");
});

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

See also

In this article

View on MDN