Sfoglia il codice sorgente

fixed issue with requested frame and about:blank URIs

Gildas 7 anni fa
parent
commit
aafbf8c1f8
1 ha cambiato i file con 11 aggiunte e 9 eliminazioni
  1. 11 9
      lib/frame-tree/content/content-frame-tree.js

+ 11 - 9
lib/frame-tree/content/content-frame-tree.js

@@ -95,9 +95,10 @@ this.frameTree = this.frameTree || (() => {
 		if (!TOP_WINDOW) {
 			windowId = message.windowId;
 		}
-		processFrames(document.querySelectorAll(FRAMES_CSS_SELECTOR), message.options, windowId, sessionId);
+		processFrames(window, document.querySelectorAll(FRAMES_CSS_SELECTOR), message.options, windowId, sessionId);
 		if (!TOP_WINDOW) {
-			sendInitResponse({ framesData: [getFrameData(document, window, windowId, message.options)], sessionId });
+			sendInitResponse({ framesData: [getFrameData(document, window, windowId, message.options)], sessionId, requestedFrameId: this.frameTree.requestedFrameId && windowId });
+			delete this.frameTree.requestedFrameId;
 		}
 	}
 
@@ -150,10 +151,10 @@ this.frameTree = this.frameTree || (() => {
 			}
 		}
 	}
-	function processFrames(frameElements, options, parentWindowId, sessionId) {
+	function processFrames(window, frameElements, options, parentWindowId, sessionId) {
 		processFramesAsync(frameElements, options, parentWindowId, sessionId);
 		if (frameElements.length) {
-			processFramesSync(frameElements, options, parentWindowId, sessionId);
+			processFramesSync(window, frameElements, options, parentWindowId, sessionId);
 		}
 	}
 
@@ -173,7 +174,7 @@ this.frameTree = this.frameTree || (() => {
 		sendInitResponse({ framesData, sessionId });
 	}
 
-	function processFramesSync(frameElements, options, parentWindowId, sessionId) {
+	function processFramesSync(window, frameElements, options, parentWindowId, sessionId) {
 		const framesData = [];
 		frameElements.forEach((frameElement, frameIndex) => {
 			const windowId = parentWindowId + WINDOW_ID_SEPARATOR + frameIndex;
@@ -185,15 +186,16 @@ this.frameTree = this.frameTree || (() => {
 			}
 			if (frameDoc) {
 				try {
-					frameElement.contentWindow.stop();
-					processFrames(frameDoc.querySelectorAll(FRAMES_CSS_SELECTOR), options, windowId, sessionId);
-					framesData.push(getFrameData(frameDoc, frameElement.contentWindow, windowId, options));
+					const frameWindow = frameElement.contentWindow;
+					frameWindow.stop();
+					processFrames(frameWindow, frameDoc.querySelectorAll(FRAMES_CSS_SELECTOR), options, windowId, sessionId);
+					framesData.push(getFrameData(frameDoc, frameWindow, windowId, options));
 				} catch (error) {
 					framesData.push({ windowId, processed: true });
 				}
 			}
 		});
-		sendInitResponse({ framesData, sessionId, requestedFrameId: this.frameTree.requestedFrameId && parentWindowId });
+		sendInitResponse({ framesData, sessionId, requestedFrameId: window.frameTree.requestedFrameId && parentWindowId });
 	}
 
 	function cleanupFrames(frameElements, options, parentWindowId, sessionId) {