- From: James Browning <notifications@github.com>
- Date: Tue, 10 Jul 2018 23:00:09 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/662/404054274@github.com>
I've definitely wanted to have behaviour similar to [this issue](https://github.com/whatwg/html/issues/2235) for simple inline code. e.g. For this sort've use case: ```js <math-plot> <module-script> export default function(x) { return x**2 } </module-script> </math-plot> ``` In this case it's the children of the `module-script` I would like to ensure only execute once (which can be important for use cases that fetch expensive resources). I tried to create a customized builtin `<script>` element in Chrome Canary to simulate the behaviour but still the `connectedCallback` is executed too early. <details> <code><pre> <script> class XModule extends HTMLScriptElement { connectedCallback() { console.log(this.text) } } customElements.define('x-module', XModule, { extends: 'script' }) </script> <script is="x-module" type="_"> console.log("Hello!") </script> </pre></code> </details> --- *On the other hand* this particular problem could be solved by ensuring that the `customElements.define` call always happens after parsing has completed. e.g. Just defer the `customElements.define` call until `DOMContentLoaded`: ```js class ScriptLike extends HTMLElement { // ... } if (document.readyState === 'interactive' || document.readyState === 'complete') { customElements.define('script-like', ScriptLike) } else { document.addEventListener('DOMContentLoaded', _ => { customElements.define('script-like', ScriptLike) }) } ``` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/whatwg/dom/issues/662#issuecomment-404054274
Received on Wednesday, 11 July 2018 06:00:33 UTC