-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
URL-bar triggered prerendering #7533
Comments
In general this sounds good to me. I wonder what the best way to achieve some of this may be in a way that doesn't lead to new specifications having to build for many types of documents. Can the fully active concept perhaps be reused here? |
I don't think it can be used as-is, although maybe it could be split up a bit. In particular, non-fully-active documents have inactive event loops (i.e. with no tasks running), which kind of defeats the point of prerendering. More generally, for "intrusive" APIs, we have a few broad possibilities for things to do while a page is prerendered or in bfcache:
It seems like in most bfcache cases we've choosen "fail". Whereas in most prerendering cases we've so far specced "delay", although in the Chromium implementation we plan to start a number of them with "discard" and then move them to "delay" over time to improve coverage. Part of this difference seems to be based on the does-it-run-JavaScript split. I.e., if you use (say) geolocation from a bfcached page, something pretty weird must have happened, so "fail" seems OK. Whereas if you prerender a page with an embedded map, it could very legitimately request geolocation permissions while prerendering, so "delay" seems much better. It's probably worth doing some spec footwork though so that for APIs which do want the same result (e.g., |
I think it should go with We should use |
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?
The text was updated successfully, but these errors were encountered: