PageLifecycle.js is a tiny JavaScript library (<1K gzipped) that allows developers to easily observe Page Lifecycle API state changes and implement Page Lifecycle best practices consistently across all browsers.
You can install this library from npm by running:
npm install --save-dev page-lifecycleReleases of this library include three minified, production-ready versions:
1. ES5: dist/lifecycle.es5.js (UMD) ⭐
Use this version for maximum compatibility with legacy browsers (that can't run ES2015+ code).
As a UMD bundle, it can be required in CommonJS or AMD environments, or it can be loaded with a script tag as the browser global lifecycle.
<script defer src="/path/to/lifecycle.es5.js"></script>
<script defer>
lifecycle.addEventListener('statechange', function(event) {
console.log(event.oldState, event.newState);
});
</script>2. ES2015: dist/lifecycle.mjs (ESM) 🔥
Use this version if you only support ES module-capable browsers or if you're using <script type="module"> and the nomodule fallback to conditionally target modern browsers.
<script type="module">
import lifecycle from '/path/to/page-lifecycle.mjs';
lifecycle.addEventListener('statechange', function(event) {
console.log(event.oldState, event.newState);
});
</script>3. ES2015 (native): dist/lifecycle.native.mjs (ESM w/o EventTarget and Event shims)
Use this version if you're only targeting browsers that support extending EventTarget and Event constructors.
Note: this version is the smallest but will only work in some browsers. The implementation instructions are the same as the ES2015 version above.
The PageLifecycle.js library exports a lifecycle object, which is a singleton instance of the Lifecycle class. The Lifecycle class has the following properties, methods, and events:
| Name | Type | Description |
|---|---|---|
state |
string |
Returns the current Page Lifecycle state. |
pageWasDiscarded |
boolean |
Returns the value of document.wasDiscarded (or false if not present).
|
| Name | Description |
|---|---|
addEventListener |
Parameters:
Adds a callback function to be invoked whenever the passed event type is detected. (Note: at the moment only the "statechange" event type is supported.) |
removeEventListener |
Parameters:
Removes a function from the current list of listeners for the passed event type. (Note: at the moment only the "statechange" event type is supported.) |
addUnsavedChanges |
Parameters:
Adds an item to an internal pending-changes stack. Calling this method adds a generic The argument passed should be unique to this state, as it can only be removed by passing the same argument to |
removeUnsavedChanges |
Parameters:
Removes an item matching the passed argument from an internal pending-changes stack. If the stack is empty, the generic |
| Name | Description |
|---|---|
statechange |
Properties:
The |
![]() ✔ |
![]() ✔ |
![]() ✔ |
![]() ✔ |
![]() 9+ |
![]() ✔ |
PageLifecycle.js has been tested and known to work in the above browsers.





