Shadow DOM polyfill
npm install @webcomponents/shadydomShadyDOM provides a shim for ShadowDOM V1. It is less correct but less intrusive
and faster than the ShadowDOM Polyfill.
Usage of the shim is transparent when attachShadow is unavailable. Elements are
patched as needed to report ShadowDOM correct dom information. Only dom tree
accessors and mutation api is maintained. Some dom api
(for example MutationObservers) is not shimmed.
To force ShadyDOM to be used even when native ShadowDOM is available, set
the ShadyDOM = {force: true} in a script prior to loading the polyfill.
``html`
For building and testing, first run
``
npm install
npm run build
To test, run npm test
ShadyDOM distribution is asynchronous for performance reasons. This means that
the composed dom will be available 1 microtask after the dom mutation occurs.
For testing, ShadyDOM.flush may be called to force syncronous composition.
ShadowDOM compatible styling is _not_ provided with the ShadyDOM shim. To
shim ShadowDOM styling, use the shadycss shim.
On very old versions of Chrome and Safari, in rare cases ShadyDOM.patch(node)textContent
must be called to properly set or innerHTML. On these browsers,firstChild
element property accessors like and textContent cannot betextContent
modified on the element prototype and instances must be patched. This is
automated but there are some cases that are not handled.
This should only be an issue when setting or innerHTML on a
node inside a shadowRoot adds or removes a element.ShadyDOM.patch(node)
In this case, the shadowRoot will not render correctly. To workaround this,
call prior to setting textContent or innerHTML.
The APIs Document.querySelectorAll, Element.querySelectorAll, Node.childNodes,ParentNode.children
and each return an Array instead of a NodeList or HTMLCollection`.