Sfoglia il codice sorgente

suport objects embedding HTML content

Gildas 7 anni fa
parent
commit
4ee5c75833

+ 1 - 1
extension/core/content/content.js

@@ -70,7 +70,7 @@
 	}
 
 	function hideHeadFrames() {
-		document.head.querySelectorAll("iframe").forEach(element => element.hidden = true);
+		document.head.querySelectorAll("iframe, frame, object[type=\"text/html\"][data]").forEach(element => element.hidden = true);
 	}
 
 	async function getOptions(options) {

+ 2 - 2
lib/frame-tree/content/frame-tree.js

@@ -91,7 +91,7 @@ this.FrameTree = (() => {
 	function initRequest(message) {
 		FrameTree.windowId = message.windowId;
 		FrameTree.index = message.index;
-		const frameElements = document.querySelectorAll("iframe, frame");
+		const frameElements = document.querySelectorAll("frame, object[type=\"text/html\"][data]");
 		if (frameElements.length) {
 			setFramesWinId(MESSAGE_PREFIX, frameElements, FrameTree.index, FrameTree.windowId, window);
 		} else {
@@ -146,7 +146,7 @@ this.FrameTree = (() => {
 				/* ignored */
 			}
 			if (frameWindow && frameDoc && topWindow) {
-				setFramesWinId(MESSAGE_PREFIX, frameDoc.querySelectorAll("iframe, frame"), index, frameWinId, frameWindow);
+				setFramesWinId(MESSAGE_PREFIX, frameDoc.querySelectorAll("iframe, frame, object[type=\"text/html\"][data]"), index, frameWinId, frameWindow);
 				topWindow.addEventListener("message", onMessage, false);
 			} else if (frameWindow) {
 				frameWindow.postMessage(MESSAGE_PREFIX + "::" + JSON.stringify({ method: "initRequest", windowId: frameWinId, index }), "*");

+ 15 - 3
lib/single-file/single-file-core.js

@@ -312,7 +312,7 @@ const SingleFileCore = (() => {
 		}
 
 		removeDiscardedResources() {
-			this.doc.querySelectorAll("applet, meta[http-equiv=refresh], object:not([type=\"image/svg+xml\"]):not([type=\"image/svg-xml\"]), embed:not([src*=\".svg\"]), link[rel*=preload], link[rel*=prefetch]").forEach(element => element.remove());
+			this.doc.querySelectorAll("applet, meta[http-equiv=refresh], object:not([type=\"image/svg+xml\"]):not([type=\"image/svg-xml\"]):not([type=\"text/html\"]), embed:not([src*=\".svg\"]), link[rel*=preload], link[rel*=prefetch]").forEach(element => element.remove());
 			this.doc.querySelectorAll("[onload]").forEach(element => element.removeAttribute("onload"));
 			this.doc.querySelectorAll("[onerror]").forEach(element => element.removeAttribute("onerror"));
 			this.doc.querySelectorAll("audio[src], video[src]").forEach(element => element.removeAttribute("src"));
@@ -323,7 +323,7 @@ const SingleFileCore = (() => {
 		}
 
 		removeFrames() {
-			this.doc.querySelectorAll("iframe, frame").forEach(element => element.remove());
+			this.doc.querySelectorAll("iframe, frame, object[type=\"text/html\"][data]").forEach(element => element.remove());
 		}
 
 		removeImports() {
@@ -488,7 +488,7 @@ const SingleFileCore = (() => {
 		}
 
 		async frames(initialization) {
-			let frameElements = this.doc.querySelectorAll("iframe, frame");
+			let frameElements = this.doc.querySelectorAll("iframe, frame, object[type=\"text/html\"][data]");
 			frameElements = DomUtil.removeNoScriptFrames(frameElements);
 			await Promise.all(frameElements.map(async (frameElement, frameIndex) => {
 				const frameWindowId = (this.options.windowId || "0") + "." + frameIndex;
@@ -519,16 +519,28 @@ const SingleFileCore = (() => {
 							return frameData.processor.initialize();
 						}
 					} else {
+						if (frameElement.tagName == "OBJECT") {
+							frameElement.setAttribute("data", "about:blank");
+						} else {
 						frameElement.setAttribute("src", "about:blank");
+						}
 						if (frameData.processor) {
 							const pageData = await frameData.processor.getPageData();
+							if (frameElement.tagName == "OBJECT") {
+								frameElement.setAttribute("data", "data:text/html," + pageData.content);
+							} else {
 							frameElement.setAttribute("srcdoc", pageData.content);
 							frameElement.sandbox = true;
 						}
 					}
+					}
 				} else {
+					if (frameElement.tagName == "OBJECT") {
+						frameElement.setAttribute("data", "about:blank");
+					} else {
 					frameElement.setAttribute("src", "about:blank");
 				}
+				}
 			}));
 		}