ProseMirror inside a ShadowRoot

I don’t think this is a bug… I think…

I’m using ProseMirror inside a ShadowRoot. In Firefox this fails at prosemirror-view/src/selection.js on lines like view.root.getSelection() because root is a ShadowRoot rather than a Document.

Chrome is fine because ShadowRoot has a .getSelection() method. Firefox, however, doesn’t appear to implement that method on ShadowRoot (yet?) as mentioned on this MDN page. (On the other hand the page actually describing the .getSelection() method says that Firefox does implement it. Guess that’s just wrong…)

I’ve successfully worked around the issue with this:

ShadowRoot.prototype.getSelection = document.getSelection.bind(document);

Which, rather surprisingly, works because in Firefox the document.getSelection method crosses shadow dom boundaries. What I can gather from the spec suggests that is actually incorrect behavior. :man_shrugging:

1 Like

Oh wow, I wasn’t aware that Firefox doesn’t implement this either. I guess we might as well work around this in the library, then. Will look into that on Monday.

See this patch.

Finally got a chance to try this and can confirm it fixes the issue I had. Thanks @marijn!