WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
249737
Setting outerHTML on child of DocumentFragment throws error
https://bugs.webkit.org/show_bug.cgi?id=249737
Summary
Setting outerHTML on child of DocumentFragment throws error
Nolan Lawson
Reported
2022-12-21 12:15:41 PST
Created
attachment 464152
[details]
Repro HTML Steps to repro: 1. Go to
https://codepen.io/nolanlawson-the-selector/pen/oNMgmXe
2. Notice that it says an error was thrown Minimal repro: const fragment = new DocumentFragment() fragment.appendChild(document.createElement('div')) fragment.firstChild.outerHTML = '' In Firefox this does not throw an Error. In Safari Technology Preview Release 146 (Safari 15.4, WebKit 16614.1.14.10.6), it throws an error:
> Cannot set outerHTML on element because its parent is not an Element
According to the spec [1]:
> If parent is a DocumentFragment, let parent be a new Element […]
So it appears that Firefox is following the spec here, but Safari is not. Note that my repro tests both a DocumentFragment and a ShadowRoot. Since a ShadowRoot is an instance of DocumentFragment, neither test should throw an error. Same bug filed on Chrome:
https://bugs.chromium.org/p/chromium/issues/detail?id=1403060
[1]:
https://w3c.github.io/DOM-Parsing/#dom-element-outerhtml
Attachments
Repro HTML
(720 bytes, text/html)
2022-12-21 12:15 PST
,
Nolan Lawson
no flags
Details
View All
Add attachment
proposed patch, testcase, etc.
Karl Dubost
Comment 1
2022-12-22 22:57:04 PST
Blink error:
> Uncaught DOMException: Failed to set the 'outerHTML' property on 'Element': This element's parent is of type '#document-fragment', which is not an element node. > at <anonymous>:1:31
WebKit error:
> nomodificationallowederror: Cannot set outerHTML on element because its parent is not an Element
Firefox returns: ''
https://searchfox.org/wubkat/rev/9ced63bbda6ac9231451b1ca549a16f397e28c78/Source/WebCore/dom/Element.cpp#3554-3589
``` ExceptionOr<void> Element::setOuterHTML(const String& html) { // The specification allows setting outerHTML on an Element whose parent is a DocumentFragment and Gecko supports this. // However, as of June 2021, Blink matches our behavior and throws a NoModificationAllowedError for non-Element parents. RefPtr parent = parentElement(); if (UNLIKELY(!parent)) { if (!parentNode()) return Exception { NoModificationAllowedError, "Cannot set outerHTML on element because it doesn't have a parent"_s }; return Exception { NoModificationAllowedError, "Cannot set outerHTML on element because its parent is not an Element"_s }; } // … cut for brevity } ``` This was added by Chris Dumez in June 2021
https://bugs.webkit.org/show_bug.cgi?id=226808
https://github.com/WebKit/WebKit/commit/dc33e397532ef8140d9e3fa80b7723e16b863746
Radar WebKit Bug Importer
Comment 2
2022-12-28 12:16:16 PST
<
rdar://problem/103746193
>
Joey Arhar
Comment 3
2022-12-29 08:59:33 PST
I opened a spec issue:
https://github.com/whatwg/html/issues/8657
Ahmad Saleem
Comment 4
2023-07-04 09:41:13 PDT
(In reply to Joey Arhar from
comment #3
)
> I opened a spec issue:
https://github.com/whatwg/html/issues/8657
As per following, Safari should align with Gecko behavior and should not throw. So I think we might need to revert Chris's patch, which made us match Blink.
https://w3c.github.io/DOM-Parsing/#dom-element-outerhtml
Chris Dumez
Comment 5
2023-07-05 09:21:52 PDT
(In reply to Ahmad Saleem from
comment #4
)
> (In reply to Joey Arhar from
comment #3
) > > I opened a spec issue:
https://github.com/whatwg/html/issues/8657
> > As per following, Safari should align with Gecko behavior and should not > throw. > > So I think we might need to revert Chris's patch, which made us match Blink. > >
https://w3c.github.io/DOM-Parsing/#dom-element-outerhtml
Yes, looks like Blink agreed on the spec issue to stop throwing so we should do the same. Do you want to do it or should I?
Ahmad Saleem
Comment 6
2023-07-05 10:54:04 PDT
PR with revert + not throw error:
https://github.com/WebKit/WebKit/pull/15575
EWS
Comment 7
2023-07-15 15:06:51 PDT
Committed
266086@main
(b41af45ee409): <
https://commits.webkit.org/266086@main
> Reviewed commits have been landed. Closing PR #15575 and removing active labels.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug