Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@KurtCattiSchmidt
Copy link

@KurtCattiSchmidt KurtCattiSchmidt commented Dec 2, 2025

Updates the definition of modulepreload to support as="style" and as="json" for preloading style and JSON module scripts respectively.

Fixes #10233

(See WHATWG Working Mode: Changes for more details.)


/acknowledgements.html ( diff )
/indices.html ( diff )
/links.html ( diff )
/semantics.html ( diff )

@KurtCattiSchmidt KurtCattiSchmidt changed the title Expanding <link type="modulepreload"> to allow "style" and "json" in as attribute Allow "style" and "json" in as attribute in modulepreload Dec 2, 2025
@KurtCattiSchmidt KurtCattiSchmidt changed the title Allow "style" and "json" in as attribute in modulepreload Allow "style" and "json" in as attribute for modulepreload Dec 2, 2025
Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also disallow "json" for <link rel=preload>?

@KurtCattiSchmidt
Copy link
Author

Should we also disallow "json" for <link rel=preload>?

You're right, "json" doesn't really make sense in preload if it's supported for modulepreload. I think this should be handled separately though, because WebKit recently added support for <link rel=preload as=json>, and we can have both for some window of time.

Filed #11995 to track and discuss separately.

@annevk
Copy link
Member

annevk commented Dec 8, 2025

I'd rather tackle them together as I have a feeling #11995 will not be addressed anytime soon otherwise. And it would be good to have that infrastructure in place as we add more types, such as text and bytes.

@KurtCattiSchmidt
Copy link
Author

I assumed there would be some window of overlap between the new and deprecated version, which is why I filed a separate bug. But if we can do them in one shot that's great. This feature is a little different in that it's not directly observable, so it does seem safe to just deprecate.

I'll update this PR to remove <link type="preload" as="json"> today.

@rniwa - you recently added support for <link type="preload" as="json"> in WebKit so your input here is appreciated.

@KurtCattiSchmidt
Copy link
Author

KurtCattiSchmidt commented Dec 8, 2025

Latest push handles removing "json" for "preload". I also added the implementation bugs. I'll work on tests next.

@KurtCattiSchmidt
Copy link
Author

Tests and MDN PR's have been are added, so the only missing part in compliance above is "two implementors are interested". @rniwa - can you give a WebKit position in https://bugs.webkit.org/show_bug.cgi?id=303761?

@bakkot
Copy link
Contributor

bakkot commented Dec 11, 2025

Note that the set of module types might be expanding - there's active proposals for text and bytes imports from JS.

@KurtCattiSchmidt
Copy link
Author

@annevk - you mentioned a missing conformance section for the as attribute, but I don't see an existing section for it, just https://html.spec.whatwg.org/#attr-link-as. Is this something I should add? Or is the table I edited in this PR under https://html.spec.whatwg.org/#attributes-3 sufficient?

@annevk
Copy link
Member

annevk commented Dec 17, 2025

@KurtCattiSchmidt those are the conformance requirements. You'll have to adjust the wording there to make it clear json is not a valid potential destination. Maybe something like:

Each potential destination except for "json" is a keyword for this attribute ...

Or maybe define preload destination as a concept which takes care of that.

@KurtCattiSchmidt
Copy link
Author

Thanks @annevk - it was awkward updating "potential destination" to exclude "json" everywhere, so I added a preload destination concept. This reduced some duplication elsewhere too.

@cwilso cwilso added the agenda+ To be discussed at a triage meeting label Dec 18, 2025
source Outdated
A <dfn data-x="concept-preload-destination">preload destination</dfn> is a <span
data-x="concept-potential-destination">potential destination</span>, excluding "<code
data-x="">json</code>" when used with <code data-x="rel-preload">preload</code> links, and is
either "<code data-x="">json</code>", "<code data-x="">style</code>", or a <span
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds like those are two different destinations then? A preload destination and a modulepreload destination?

source Outdated
@@ -16396,18 +16390,23 @@ interface <dfn interface>HTMLLinkElement</dfn> : <span>HTMLElement</span> {

<hr>

A <dfn data-x="concept-preload-destination">preload destination</dfn> is a <span
data-x="concept-potential-destination">potential destination</span>, excluding "<code
data-x="">json</code>" when used with <code data-x="rel-preload">preload</code> links, and is
Copy link

@smaug---- smaug---- Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excluding a single thing this way is a bit icky special case, and special cases tend to cause issues later. Would there be some other way to express this (if we need to exclude json. Not sure why we need to, but perhaps it doesn't matter too much.).

@noamr
Copy link
Collaborator

noamr commented Dec 18, 2025

Should we also disallow "json" for <link rel=preload>?

It's already disallowed. See https://html.spec.whatwg.org/multipage/links.html#translate-a-preload-destination
It's probably enough to add json and style to modulepreload specifically.

@KurtCattiSchmidt
Copy link
Author

KurtCattiSchmidt commented Dec 18, 2025

Should we also disallow "json" for <link rel=preload>?

It's already disallowed. See https://html.spec.whatwg.org/multipage/links.html#translate-a-preload-destination It's probably enough to add json and style to modulepreload specifically.

Not exactly, https://html.spec.whatwg.org/#consume-a-preloaded-resource lists JSON as a preload destination. I reverted to the prior commit in this PR, which removes that part and adds "style" and "json" to modulepreload. Does this version look correct @noamr?

source Outdated
<td> <code data-x="attr-link-as">link</code>
<td> <span data-x="concept-potential-destination">Potential destination</span> for a preload request (for <code data-x="attr-link-rel">rel</code>="<code data-x="rel-preload">preload</code>" and <code data-x="attr-link-rel">rel</code>="<code data-x="rel-modulepreload">modulepreload</code>")
<td> <span data-x="concept-potential-destination">Potential destination</span>, for <code data-x="attr-link-rel">rel</code>="<code data-x="rel-preload">preload</code>"; <span data-x="concept-script-like-destination">script-like destination</span>, for <code data-x="attr-link-rel">rel</code>="<code data-x="rel-modulepreload">modulepreload</code>"
<td> <span data-x="concept-potential-destination">Potential destination</span>, for <code data-x="attr-link-rel">rel</code>="<code data-x="rel-preload">preload</code>", excluding "<code data-x="">json</code>"; "<code data-x="">json</code>", "<code data-x="">style</code>", or a <span data-x="concept-script-like-destination">script-like destination</span> for <code data-x="attr-link-rel">rel</code>="<code data-x="rel-modulepreload">modulepreload</code>"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't need the "excluding json". It's a subset of potential destination, we can either say "potential destination" for preload or call out the options ("fetch", "font", "image", "script", "style", or "track").

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left it as "potential destination"

source Outdated
task</span> on the <span>networking task source</span> given <var>el</var> to <span
data-x="concept-event-fire">fire an event</span> named <code data-x="event-error">error</code>
at <var>el</var>, and return.</p></li>
<li><p>If <var>destination</var> is not "<code data-x="">json</code>","<code
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps have a definition of "module destination" which is json, style or a script-like destination, and refer to it from both places.

Copy link
Author

@KurtCattiSchmidt KurtCattiSchmidt Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Called it "module preload destination", as the new definition is unfortunately specific to module preloads. Modules in general use "javascript-or-wasm" for as="script".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agenda+ To be discussed at a triage meeting

Development

Successfully merging this pull request may close these issues.

Support json/style as modulepreload destinations

6 participants