Explorar o código

catch exeptions when attaching shadowRoots

Gildas %!s(int64=5) %!d(string=hai) anos
pai
achega
633cc15286

+ 13 - 7
extension/ui/content/content-ui-editor-web.js

@@ -1759,10 +1759,14 @@ table {
 					Array.from(element.childNodes).forEach(node => shadowRoot.appendChild(node));
 					element.remove();
 				} else {
-					shadowRoot = element.parentElement.attachShadow({ mode: "open" });
-					const contentDocument = (new DOMParser()).parseFromString(element.innerHTML, "text/html");
-					Array.from(contentDocument.head.childNodes).forEach(node => shadowRoot.appendChild(node));
-					Array.from(contentDocument.body.childNodes).forEach(node => shadowRoot.appendChild(node));
+					try {
+						shadowRoot = element.parentElement.attachShadow({ mode: "open" });
+						const contentDocument = (new DOMParser()).parseFromString(element.innerHTML, "text/html");
+						Array.from(contentDocument.head.childNodes).forEach(node => shadowRoot.appendChild(node));
+						Array.from(contentDocument.body.childNodes).forEach(node => shadowRoot.appendChild(node));
+					} catch (error) {
+						// ignored
+					}
 				}
 				deserializeShadowRoots(shadowRoot);
 			}
@@ -1799,9 +1803,11 @@ table {
 				node.querySelectorAll("template[${SHADOW_MODE_ATTRIBUTE_NAME}]").forEach(element=>{
 					let shadowRoot = getShadowRoot(element.parentElement);
 					if (!shadowRoot) {
-						shadowRoot = element.parentElement.attachShadow({mode:element.getAttribute("${SHADOW_MODE_ATTRIBUTE_NAME}"),delegatesFocus:Boolean(element.getAttribute("${SHADOW_DELEGATE_FOCUS_ATTRIBUTE_NAME}"))});
-						shadowRoot.innerHTML = element.innerHTML;
-						element.remove();
+						try {
+							shadowRoot = element.parentElement.attachShadow({mode:element.getAttribute("${SHADOW_MODE_ATTRIBUTE_NAME}"),delegatesFocus:Boolean(element.getAttribute("${SHADOW_DELEGATE_FOCUS_ATTRIBUTE_NAME}"))});
+							shadowRoot.innerHTML = element.innerHTML;
+							element.remove();
+						} catch (error) {}						
 						processNode(shadowRoot);
 					}
 				})

+ 1 - 1
lib/single-file/single-file-core.js

@@ -1025,7 +1025,7 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 				}
 				const scriptElement = doc.createElement("script");
 				scriptElement.setAttribute(SCRIPT_TEMPLATE_SHADOW_ROOT, "");
-				scriptElement.textContent = `(()=>{document.currentScript.remove();processNode(document);function processNode(node){node.querySelectorAll("template[${SHADOW_MODE_ATTRIBUTE_NAME}]").forEach(element=>{let shadowRoot = element.parentElement.shadowRoot;if (!shadowRoot) {shadowRoot=element.parentElement.attachShadow({mode:element.getAttribute("${SHADOW_MODE_ATTRIBUTE_NAME}"),delegatesFocus:Boolean(element.getAttribute("${SHADOW_DELEGATE_FOCUS_ATTRIBUTE_NAME}"))});shadowRoot.innerHTML=element.innerHTML;element.remove();processNode(shadowRoot)}})}})()`;
+				scriptElement.textContent = `(()=>{document.currentScript.remove();processNode(document);function processNode(node){node.querySelectorAll("template[${SHADOW_MODE_ATTRIBUTE_NAME}]").forEach(element=>{let shadowRoot = element.parentElement.shadowRoot;if (!shadowRoot) {try {shadowRoot=element.parentElement.attachShadow({mode:element.getAttribute("${SHADOW_MODE_ATTRIBUTE_NAME}"),delegatesFocus:Boolean(element.getAttribute("${SHADOW_DELEGATE_FOCUS_ATTRIBUTE_NAME}"))});shadowRoot.innerHTML=element.innerHTML;element.remove()} catch (error) {} processNode(shadowRoot)}})}})()`;
 				doc.body.appendChild(scriptElement);
 			}