Ver Fonte

catch exceptions thrown by chrome.dom.openOrClosedShadowRoot

Gildas há 5 anos atrás
pai
commit
6a4e8ab70a

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

@@ -1877,7 +1877,17 @@ table {
 
 	function getShadowRoot(element) {
 		const chrome = window.chrome;
-		return element.openOrClosedShadowRoot || (chrome && chrome.dom && chrome.dom.openOrClosedShadowRoot && chrome.dom.openOrClosedShadowRoot(element)) || element.shadowRoot;
+		if (element.openOrClosedShadowRoot) {
+			return element.openOrClosedShadowRoot;
+		} else if (chrome && chrome.dom && chrome.dom.openOrClosedShadowRoot) {
+			try {
+				return chrome.dom.openOrClosedShadowRoot(element);
+			} catch (error) {
+				return element.shadowRoot;
+			}
+		} else {
+			element.shadowRoot;
+		}
 	}
 
 })();

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

@@ -1026,7 +1026,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=>{const chrome = window.chrome;let shadowRoot = element.parentElement.openOrClosedShadowRoot || (chrome && chrome.dom && chrome.dom.openOrClosedShadowRoot && chrome.dom.openOrClosedShadowRoot(element.parentElement)) || 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) {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)}})}})()`;
 				doc.body.appendChild(scriptElement);
 			}
 

+ 11 - 1
lib/single-file/single-file-helper.js

@@ -329,7 +329,17 @@ this.singlefile.lib.helper = this.singlefile.lib.helper || (() => {
 
 	function getShadowRoot(element) {
 		const chrome = window.chrome;
-		return element.openOrClosedShadowRoot || (chrome && chrome.dom && chrome.dom.openOrClosedShadowRoot && chrome.dom.openOrClosedShadowRoot(element)) || element.shadowRoot;
+		if (element.openOrClosedShadowRoot) {
+			return element.openOrClosedShadowRoot;
+		} else if (chrome && chrome.dom && chrome.dom.openOrClosedShadowRoot) {
+			try {
+				return chrome.dom.openOrClosedShadowRoot(element);
+			} catch (error) {
+				return element.shadowRoot;
+			}
+		} else {
+			element.shadowRoot;
+		}
 	}
 
 	function normalizeFontFamily(fontFamilyName = "") {