getify / Mock-DOM-Resources

A mock of (parts of) the DOM API to simulate resource preloading and loading
MIT License
25 stars 6 forks source link

should we add a `markup` option? #8

Open getify opened 7 years ago

getify commented 7 years ago

Should we add an option that pre-configures the DOM (maybe just the head?) with elements as if they had been parsed from the markup?

Notably, some elements like <script async> behave differently if parsed in markup as opposed to being added via API calls in code. This option would allow you to mock out what the initial state of that part of the DOM was and have it behave as markup instead of API calls. It would go ahead and "request" any resource URLs from <script>, <link> or <img> elements.

This would then maybe become the preferred way to emulate markup <link rel=preload> elements over what's currently required: to artificially create those with DOM API calls. The timing would of course still be controlled by resources entries.

getify commented 7 years ago

One element that would definitely need to be "parsed" from such an option: <base>. It would of course have to change the document.baseURI setting. Perhaps this would mean we should then remove that baseURI option, so there's no confusion if those two are allowed mismatch.

getify commented 7 years ago

Also: a challenge here is that any resource requests, except <script async>, that are encountered during the "initial DOM parsing" actually delay the DOMContentLoaded event.

Moreover, if the DOM hasn't yet fired the DOMContentLoaded event, any <script defer> elements need to have their execution set to be no earlier than its firing.

getify commented 7 years ago

https://jakearchibald.com/2017/es-modules-in-browsers/

getify commented 4 years ago

We can parse the markup with https://github.com/jsdom/jsdom