PerformanceNavigationTiming: notRestoredReasons property

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The notRestoredReasons read-only property of the PerformanceNavigationTiming interface returns a NotRestoredReasons object providing report data on reasons why the current document was blocked from using the back/forward cache (bfcache) on navigation.

Value

When the associated PerformanceNavigationTiming object represents a history navigation, notRestoredReasons returns a NotRestoredReasons object.

When the PerformanceNavigationTiming object does not represent a history navigation, notRestoredReasons will return null. This is useful for determining whether bfcache is not relevant to a particular navigation (as opposed to notRestoredReasons not being supported, in which case it would return undefined).

Note: notRestoredReasons may return null despite the navigation type being reported as a back/forward navigation. These circumstances include duplicating a back/forward navigation in a new tab and restoring a back/forward navigation tab after a browser restart. In such cases, some browsers copy the navigation type from the original tab, but as these are not actually back/forward navigations, notRestoredReasons returns null.

Examples

PerformanceNavigationTiming data can be obtained from the performance timeline using Performance.getEntriesByType() or PerformanceObserver.

For example, you could invoke the following function to return all PerformanceNavigationTiming objects currently present in the performance timeline and log their notRestoredReasons:

js
function returnNRR() {
  const navEntries = performance.getEntriesByType("navigation");
  for (let i = 0; i < navEntries.length; i++) {
    console.log(`Navigation entry ${i}`);
    let navEntry = navEntries[i];
    console.log(navEntry.notRestoredReasons);
  }
}

The PerformanceNavigationTiming.notRestoredReasons property returns an object with the following structure, which provides reasons why the current document was blocked from using the bfcache. In this example the top-level frame has no embedded child <iframe>s:

js
{
  children: [],
  id: null,
  name: null,
  reasons: [
    { reason: "unload-listener" }
  ],
  src: "",
  url: "example.com",
}

Specifications

Specification
Navigation Timing Level 2
# dom-performancenavigationtiming-notrestoredreasons

Browser compatibility

BCD tables only load in the browser

See also