|
|
@@ -57,20 +57,23 @@ this.FrameTree = this.FrameTree || (() => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- let framesData, dataRequestCallbacks;
|
|
|
+ let framesData, dataRequestCallbacks, initResponseSent;
|
|
|
|
|
|
if (window == top) {
|
|
|
browser.runtime.onMessage.addListener(async message => {
|
|
|
if (message.method == "FrameTree.initRequest" && document.documentElement instanceof HTMLHtmlElement) {
|
|
|
dataRequestCallbacks = new Map();
|
|
|
framesData = [];
|
|
|
+ initResponseSent = false;
|
|
|
initRequest(message);
|
|
|
+ return {};
|
|
|
}
|
|
|
if (message.method == "FrameTree.getDataResponse") {
|
|
|
getDataResponse(message);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
browser.runtime.onMessage.addListener(async message => {
|
|
|
if (message.method == "FrameTree.getDataRequest" && FrameTree.windowId == message.windowId) {
|
|
|
const docData = docHelper.preProcessDoc(document, window, message.options);
|
|
|
@@ -83,10 +86,12 @@ this.FrameTree = this.FrameTree || (() => {
|
|
|
canvasData: docData.canvasData,
|
|
|
baseURI: document.baseURI,
|
|
|
title: document.title
|
|
|
- }).catch(() => {/* ignored */ });
|
|
|
+ });
|
|
|
docHelper.postProcessDoc(document, message.options);
|
|
|
+ return {};
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
addEventListener("message", event => {
|
|
|
if (typeof event.data == "string" && event.data.startsWith(MESSAGE_PREFIX + "::")) {
|
|
|
const message = JSON.parse(event.data.substring(MESSAGE_PREFIX.length + 2));
|
|
|
@@ -112,7 +117,7 @@ this.FrameTree = this.FrameTree || (() => {
|
|
|
method: "FrameTree.getDataRequest",
|
|
|
windowId: frameData.windowId,
|
|
|
options: { removeHiddenElements: options.removeHiddenElements, compressHTML: options.compressHTML }
|
|
|
- }).catch(() => { /* ignored */ });
|
|
|
+ });
|
|
|
}
|
|
|
frameData.getDataResponseTimeout = timeout.set(() => top.postMessage(MESSAGE_PREFIX + "::" + JSON.stringify({ method: "getDataResponse", windowId: frameData.windowId }), "*"), TIMEOUT_DATA_RESPONSE_MESSAGE);
|
|
|
});
|
|
|
@@ -137,13 +142,13 @@ this.FrameTree = this.FrameTree || (() => {
|
|
|
message.framesData = message.framesData instanceof Array ? message.framesData : JSON.parse(message.framesData);
|
|
|
framesData = framesData.concat(message.framesData);
|
|
|
const frameData = framesData.find(frameData => frameData.windowId == message.windowId);
|
|
|
- const pendingCount = framesData.filter(frameData => !frameData.processed).length;
|
|
|
if (message.windowId != "0") {
|
|
|
frameData.processed = true;
|
|
|
}
|
|
|
- if (!pendingCount || pendingCount == 1) {
|
|
|
- browser.runtime.sendMessage({ method: "FrameTree.initResponse" })
|
|
|
- .catch(() => { /* ignored */ });
|
|
|
+ const pendingCount = framesData.filter(frameData => !frameData.processed).length;
|
|
|
+ if (!pendingCount && !initResponseSent) {
|
|
|
+ initResponseSent = true;
|
|
|
+ browser.runtime.sendMessage({ method: "FrameTree.initResponse" });
|
|
|
}
|
|
|
}
|
|
|
} else {
|