Description
Today, Safari and Edge ship URL-bar triggered prerendering. Chrome is preparing to do so too. Ideally we'd like to do so in a way that is interoperable, and also clear to developers what is going on.
We've been working on a spec for this at https://wicg.github.io/nav-speculation/prerendering.html . Some of it goes beyond the scope of this issue, e.g. that document has a draft of how we envision <link rel="prerender">
working, and has some (incomplete) considerations for how to handle cross-origin prerendering in a privacy-preserving way, by avoiding storage and credential access. But much of it is applicable to URL-bar triggered prerendering.
In particular, we think it would be valuable to get interop on (and merge into main specs ASAP instead of monkeypatching):
-
Prevention of intrusive behaviors, i.e. clear specs on exactly how APIs such as geolocation, media autoplay, or alert() behave while prerendering. For example, we have some reports from early testing that people were able to get Safari to start doing speech synthesis by typing a certain URL in the URL bar, without pressing enter, because they were prerendering a page that used the speech synthesis API and didn't disable it in the prerendering context.
-
An API for developers to detect prerendering and react to becoming activated, as well as integration into the performance timeline API. This is useful for, e.g., counting prerenders differently in analytics, or avoiding fetching large video resources. See the explainer for more background.
-
The foundational basic concept of a browsing context that is being prerendered, and how navigation works inside those browsing contexts. For example, we want to ensure that if a prerendered page is activated, it doesn't suddenly come with four session history entries; thus we've specified that all navigations while prerendering get converted to replacement navigations.
If other implementers are interested in achieving interop in these areas, we'd love to do the work to merge the relevant parts of the spec into HTML, so that web developers have a clear idea of how URL-bar-triggered prerenders affect their page and the APIs they call. Maybe we can even add an API to WebDriver to trigger URL-bar-based prerendering and thus write web platform tests for all these behaviors.
Ideally, this can also serve as a future starting point for more ambitious work on things like <link rel="prerender">
or other web-page-triggered mechanisms of prerendering. But those are much more complicated and we think the right place to start is user-initiated prerenders, which are still web-observable, but involve only a single party.
Thoughts?