Describe the bug
The element passed to a use:* directive has an ownerDocument that differs from the application's Document (i.e., window.document) even though the element belongs to the application's Document. This prevents directives like the following from working:
function listenersDirective(element: HTMLElement) {
element.ownerDocument.addEventListener("click", handleClick);
// ...
onCleanup(() => {
element.ownerDocument.removeEventListener("click", handleClick);
// ...
});
}
This discrepancy is problematic in certain types of Applications and NPM Packages related to the Web. It's not immediately clear what exactly element.ownerDocument is pointing to. It points to a Document, but it definitely doesn't point to window.document.
Your Example Website or App
https://playground.solidjs.com/anonymous/5ddfcd3c-103f-4283-aff6-6720325bfbd5
Steps to Reproduce the Bug or Issue
- Create any valid Solid Directive
- Compare the
element.ownerDocument in the Solid Directive with the global window.document and find that the two are not referentially equivalent
The Solid.js Playground Link provided above exemplifies this problem.
Expected behavior
The HTMLElement passed to any given Solid Directive on the Web should have an ownerDocument that's [referentially] equivalent to the application's Document (i.e., window.document).
Platform
- OS: MacOS
- Browser: Chrome
- Version: 118.0
Additional context
This bug is not observable after the application has finished rendering. If you open the devtools and select the element that was given a directive, then element.ownerDocument === window.document will yield true in the console even though it yielded false during the call to the Solid Directive.