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

don't empty the frames in the page

Former-commit-id: 4210c37dd538175ce1eb2dbe08a65e09943b3fb0
Gildas 6 лет назад
Родитель
Сommit
95e0f4109c

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

@@ -1187,7 +1187,7 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
 
 
 		async processFrames() {
 		async processFrames() {
 			if (this.options.frames) {
 			if (this.options.frames) {
-				const frameElements = Array.from(this.doc.querySelectorAll("iframe, frame, object[type=\"text/html\"][data]"));
+				const frameElements = Array.from(this.doc.querySelectorAll("iframe:not([" + util.HIDDEN_FRAME_ATTRIBUTE_NAME + "]), frame, object[type=\"text/html\"][data]"));
 				await Promise.all(frameElements.map(async frameElement => {
 				await Promise.all(frameElements.map(async frameElement => {
 					const frameWindowId = frameElement.getAttribute(util.WIN_ID_ATTRIBUTE_NAME);
 					const frameWindowId = frameElement.getAttribute(util.WIN_ID_ATTRIBUTE_NAME);
 					if (frameWindowId) {
 					if (frameWindowId) {

+ 7 - 3
lib/single-file/single-file-helper.js

@@ -31,6 +31,7 @@ this.singlefile.lib.helper = this.singlefile.lib.helper || (() => {
 	const ON_AFTER_CAPTURE_EVENT_NAME = "single-file-on-after-capture";
 	const ON_AFTER_CAPTURE_EVENT_NAME = "single-file-on-after-capture";
 	const REMOVED_CONTENT_ATTRIBUTE_NAME = "data-single-file-removed-content";
 	const REMOVED_CONTENT_ATTRIBUTE_NAME = "data-single-file-removed-content";
 	const HIDDEN_CONTENT_ATTRIBUTE_NAME = "data-single-file-hidden-content";
 	const HIDDEN_CONTENT_ATTRIBUTE_NAME = "data-single-file-hidden-content";
+	const HIDDEN_FRAME_ATTRIBUTE_NAME = "data-single-file-hidden-frame";
 	const PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME = "data-single-file-preserved-space-element";
 	const PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME = "data-single-file-preserved-space-element";
 	const SHADOW_ROOT_ATTRIBUTE_NAME = "data-single-file-shadow-root-element";
 	const SHADOW_ROOT_ATTRIBUTE_NAME = "data-single-file-shadow-root-element";
 	const WIN_ID_ATTRIBUTE_NAME = "data-single-file-win-id";
 	const WIN_ID_ATTRIBUTE_NAME = "data-single-file-win-id";
@@ -73,6 +74,7 @@ this.singlefile.lib.helper = this.singlefile.lib.helper || (() => {
 		PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME,
 		PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME,
 		REMOVED_CONTENT_ATTRIBUTE_NAME,
 		REMOVED_CONTENT_ATTRIBUTE_NAME,
 		HIDDEN_CONTENT_ATTRIBUTE_NAME,
 		HIDDEN_CONTENT_ATTRIBUTE_NAME,
+		HIDDEN_FRAME_ATTRIBUTE_NAME,
 		IMAGE_ATTRIBUTE_NAME,
 		IMAGE_ATTRIBUTE_NAME,
 		POSTER_ATTRIBUTE_NAME,
 		POSTER_ATTRIBUTE_NAME,
 		CANVAS_ATTRIBUTE_NAME,
 		CANVAS_ATTRIBUTE_NAME,
@@ -242,8 +244,9 @@ this.singlefile.lib.helper = this.singlefile.lib.helper || (() => {
 			}
 			}
 		}
 		}
 		if (element.tagName == "IFRAME") {
 		if (element.tagName == "IFRAME") {
-			if (elementHidden) {
-				element.setAttribute("src", "data:text/html,");
+			if (elementHidden && options.removeHiddenElements) {
+				element.setAttribute(HIDDEN_FRAME_ATTRIBUTE_NAME, "");
+				data.markedElements.push(element);
 			}
 			}
 		}
 		}
 		if (element.tagName == "LINK") {
 		if (element.tagName == "LINK") {
@@ -336,12 +339,13 @@ this.singlefile.lib.helper = this.singlefile.lib.helper || (() => {
 			doc.head.querySelectorAll("*:not(base):not(link):not(meta):not(noscript):not(script):not(style):not(template):not(title)").forEach(element => element.removeAttribute("hidden"));
 			doc.head.querySelectorAll("*:not(base):not(link):not(meta):not(noscript):not(script):not(style):not(template):not(title)").forEach(element => element.removeAttribute("hidden"));
 		}
 		}
 		if (!markedElements) {
 		if (!markedElements) {
-			const singleFileAttributes = [REMOVED_CONTENT_ATTRIBUTE_NAME, HIDDEN_CONTENT_ATTRIBUTE_NAME, PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME, IMAGE_ATTRIBUTE_NAME, POSTER_ATTRIBUTE_NAME, CANVAS_ATTRIBUTE_NAME, INPUT_VALUE_ATTRIBUTE_NAME, SHADOW_ROOT_ATTRIBUTE_NAME, HTML_IMPORT_ATTRIBUTE_NAME, STYLESHEET_ATTRIBUTE_NAME, ASYNC_SCRIPT_ATTRIBUTE_NAME];
+			const singleFileAttributes = [REMOVED_CONTENT_ATTRIBUTE_NAME, HIDDEN_FRAME_ATTRIBUTE_NAME, HIDDEN_CONTENT_ATTRIBUTE_NAME, PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME, IMAGE_ATTRIBUTE_NAME, POSTER_ATTRIBUTE_NAME, CANVAS_ATTRIBUTE_NAME, INPUT_VALUE_ATTRIBUTE_NAME, SHADOW_ROOT_ATTRIBUTE_NAME, HTML_IMPORT_ATTRIBUTE_NAME, STYLESHEET_ATTRIBUTE_NAME, ASYNC_SCRIPT_ATTRIBUTE_NAME];
 			markedElements = doc.querySelectorAll(singleFileAttributes.map(name => "[" + name + "]").join(","));
 			markedElements = doc.querySelectorAll(singleFileAttributes.map(name => "[" + name + "]").join(","));
 		}
 		}
 		markedElements.forEach(element => {
 		markedElements.forEach(element => {
 			element.removeAttribute(REMOVED_CONTENT_ATTRIBUTE_NAME);
 			element.removeAttribute(REMOVED_CONTENT_ATTRIBUTE_NAME);
 			element.removeAttribute(HIDDEN_CONTENT_ATTRIBUTE_NAME);
 			element.removeAttribute(HIDDEN_CONTENT_ATTRIBUTE_NAME);
+			element.removeAttribute(HIDDEN_FRAME_ATTRIBUTE_NAME);
 			element.removeAttribute(PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME);
 			element.removeAttribute(PRESERVED_SPACE_ELEMENT_ATTRIBUTE_NAME);
 			element.removeAttribute(IMAGE_ATTRIBUTE_NAME);
 			element.removeAttribute(IMAGE_ATTRIBUTE_NAME);
 			element.removeAttribute(POSTER_ATTRIBUTE_NAME);
 			element.removeAttribute(POSTER_ATTRIBUTE_NAME);

+ 1 - 0
lib/single-file/single-file-util.js

@@ -196,6 +196,7 @@ this.singlefile.lib.util = this.singlefile.lib.util || (() => {
 				WIN_ID_ATTRIBUTE_NAME: helper.WIN_ID_ATTRIBUTE_NAME,
 				WIN_ID_ATTRIBUTE_NAME: helper.WIN_ID_ATTRIBUTE_NAME,
 				REMOVED_CONTENT_ATTRIBUTE_NAME: helper.REMOVED_CONTENT_ATTRIBUTE_NAME,
 				REMOVED_CONTENT_ATTRIBUTE_NAME: helper.REMOVED_CONTENT_ATTRIBUTE_NAME,
 				HIDDEN_CONTENT_ATTRIBUTE_NAME: helper.HIDDEN_CONTENT_ATTRIBUTE_NAME,
 				HIDDEN_CONTENT_ATTRIBUTE_NAME: helper.HIDDEN_CONTENT_ATTRIBUTE_NAME,
+				HIDDEN_FRAME_ATTRIBUTE_NAME: helper.HIDDEN_FRAME_ATTRIBUTE_NAME,
 				IMAGE_ATTRIBUTE_NAME: helper.IMAGE_ATTRIBUTE_NAME,
 				IMAGE_ATTRIBUTE_NAME: helper.IMAGE_ATTRIBUTE_NAME,
 				POSTER_ATTRIBUTE_NAME: helper.POSTER_ATTRIBUTE_NAME,
 				POSTER_ATTRIBUTE_NAME: helper.POSTER_ATTRIBUTE_NAME,
 				CANVAS_ATTRIBUTE_NAME: helper.CANVAS_ATTRIBUTE_NAME,
 				CANVAS_ATTRIBUTE_NAME: helper.CANVAS_ATTRIBUTE_NAME,