w3c / DOM-Parsing

DOM Parsing and Serialization
https://w3c.github.io/DOM-Parsing/
Other
27 stars 14 forks source link

Element.outerHTML setter specification doesn't match majority of browsers #70

Open cdumez opened 3 years ago

cdumez commented 3 years ago

While working on trying to align WebKit's Element.outerHTML setter with other browsers, I noticed a few issues:

  1. WebKit & Blink have logic in the setter to merge with the previous & next Text nodes after inserting the fragment. This is not present in the specification and Gecko doesn't seem to implement it.
  2. WebKit & Blink throw a NoModificationAllowedError if the parent is not an Element while the specification allows setting outerHTML when the parent is a DocumentFragment. Gecko doesn't throw so they may be matching the spec here, not sure.
  3. The specification says that we should early return without throwing if the parent is null. Per point 2, WebKit & Blink throw a NoModificationAllowedError instead. It seems Gecko matches the spec.
cdumez commented 3 years ago

Looks like the Text node merging logic was added to WebKit by a Chromium engineer via https://bugs.webkit.org/show_bug.cgi?id=52686, and the following spec bug was filed at the time: https://www.w3.org/Bugs/Public/show_bug.cgi?id=12584.

annevk commented 3 years ago

Aligning Gecko is tracked in https://bugzilla.mozilla.org/show_bug.cgi?id=1713492.

The Text node merging logic should probably be shared with outerText (though I haven't investigated deeply).