Fixes
- A resource answered with a server error (status 500 or more) is requested once more without the cache, in the page and in its frames. The fetch runs in force-cache mode, which replays a stored response without revalidating it whatever its status, so an error served during a short outage came back in every save for as long as the cache entry lived. The frames now receive the cache mode of the retry.
- Update single-file-core to 1.6.39:
- A
@font-facerule whosesrclist holds an item that fails to parse no longer loses its font. Browsers parse the list item by item and skip only the broken one, so a comma typed where a semicolon belonged (src: url(a.woff) format("woff"), font-display: swap;, the way every "Libé" font on liberation.fr is written) still loads the font on the live page while the saved page kept a URL that pointed nowhere. The valid sources are now kept and embedded. - The "Remove unused fonts" option no longer removes a font the page draws only through a list marker (the numbers of an ordered list, a
::markericon) or atext-transform(É drawn from an é): the characters a marker and a transform draw are now reported as drawn, in Chrome and Firefox alike. - "Remove unused styles" also removes the custom properties nothing reads, such as an icon set declared as
--icon: url()properties under:rootwhose rules were removed: on linkedin.com this saves 1.25 MB and 272 inline SVGs with no computed style changed. - Resources are fetched at most 6 at a time per host, what browsers allow over HTTP/1.1. Over HTTP/2 and HTTP/3 every resource of a page left at once, and a site behind a rate limiter answered 429 to a quarter of them.
- An image still loading when the page is saved is kept instead of being dropped as hidden because its box measured 0 × 0.
- A frame that failed to load (blocked by
X-Frame-Options, unreachable host, dead embed) is given up after 2 s instead of 5 s before the page is saved. The:first-letterstyle is read only on block containers when collecting the used fonts.
- A