Просмотр исходного кода

make sure shadowRoot is defined

Gildas 5 лет назад
Родитель
Сommit
26333d2447

+ 27 - 1
extension/ui/content/content-ui-editor-init-web.js

@@ -1 +1,27 @@
-(()=>{document.currentScript.remove();processNode(document);function processNode(node){node.querySelectorAll("template[shadowmode]").forEach(element=>{let shadowRoot = element.parentElement.shadowRoot;if (!shadowRoot) {try {shadowRoot=element.parentElement.attachShadow({mode:element.getAttribute("shadowmode"),delegatesFocus:Boolean(element.getAttribute("delegatesfocus"))});shadowRoot.innerHTML=element.innerHTML;element.remove()} catch (error) {} processNode(shadowRoot)}})}})()
+/* global document */
+
+(() => {
+	document.currentScript.remove();
+	processNode(document);
+
+	function processNode(node) {
+		node.querySelectorAll("template[shadowmode]").forEach(element => {
+			let shadowRoot = element.parentElement.shadowRoot;
+			if (!shadowRoot) {
+				try {
+					shadowRoot = element.parentElement.attachShadow({
+						mode: element.getAttribute("shadowmode"),
+						delegatesFocus: Boolean(element.getAttribute("delegatesfocus"))
+					});
+					shadowRoot.innerHTML = element.innerHTML;
+					element.remove();
+				} catch (error) {
+					// ignored
+				}
+				if (shadowRoot) {
+					processNode(shadowRoot);
+				}
+			}
+		})
+	}
+})()

+ 3 - 1
extension/ui/content/content-ui-editor-web.js

@@ -1775,7 +1775,9 @@ table {
 						// ignored
 					}
 				}
-				deserializeShadowRoots(shadowRoot);
+				if (shadowRoot) {
+					deserializeShadowRoots(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) {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)}})}})()`;
+				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) {} if (shadowRoot) {processNode(shadowRoot)}}})}})()`;
 				doc.body.appendChild(scriptElement);
 			}