Jelajahi Sumber

fixed message passing issue on Firefox

Former-commit-id: c2ef9272f0ca8bd3ccda8f2ec0f420583b842224
Gildas 6 tahun lalu
induk
melakukan
9dce11e02d

+ 9 - 3
extension/core/content/content-main.js

@@ -35,7 +35,14 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 		fetch: singlefile.extension.lib.fetch.content.resources.fetch,
 		frameFetch: singlefile.extension.lib.fetch.content.resources.frameFetch
 	});
-	browser.runtime.onMessage.addListener(async message => {
+	browser.runtime.onMessage.addListener(message => {
+		if (message.method == "content.save" || message.method == "content.cancelSave") {
+			return onMessage(message);
+		}
+	});
+	return {};
+
+	async function onMessage(message) {
 		if (!ui) {
 			ui = singlefile.extension.ui.content.main;
 		}
@@ -51,8 +58,7 @@ this.singlefile.extension.core.content.main = this.singlefile.extension.core.con
 			}
 			return {};
 		}
-	});
-	return {};
+	}
 
 	async function savePage(message) {
 		const options = message.options;

+ 20 - 16
extension/lib/fetch/content/content-fetch-resources.js

@@ -29,26 +29,30 @@ this.singlefile.extension.lib.fetch.content.resources = this.singlefile.extensio
 	const FETCH_RESPONSE_EVENT = "single-file-response-fetch";
 
 
-	browser.runtime.onMessage.addListener(async message => {
+	browser.runtime.onMessage.addListener(message => {
 		if (message.method == "fetch.frame" && window.frameId && window.frameId == message.frameId) {
-			try {
-				let response = await fetch(message.url, { cache: "force-cache" });
-				if (response.status == 403) {
-					response = hostFetch(message.url);
-				}
-				return {
-					status: response.status,
-					headers: Array.from(response.headers),
-					array: Array.from(new Uint8Array(await response.arrayBuffer()))
-				};
-			} catch (error) {
-				return {
-					error: error.toString()
-				};
-			}
+			return onMessage(message);
 		}
 	});
 
+	async function onMessage(message) {
+		try {
+			let response = await fetch(message.url, { cache: "force-cache" });
+			if (response.status == 403) {
+				response = hostFetch(message.url);
+			}
+			return {
+				status: response.status,
+				headers: Array.from(response.headers),
+				array: Array.from(new Uint8Array(await response.arrayBuffer()))
+			};
+		} catch (error) {
+			return {
+				error: error.toString()
+			};
+		}
+	}
+
 	return {
 		fetch: async url => {
 			try {