From bec0fcafb9afbf46b68616400442d70fd2453d71 Mon Sep 17 00:00:00 2001 From: lbqds Date: Mon, 25 Nov 2024 17:51:51 +0800 Subject: [PATCH] Make injection of inpage.js on dapps synchronous --- packages/extension/manifest/v3.json | 6 ++++++ packages/extension/src/background/index.ts | 21 +++++++++++++++++++++ packages/extension/src/content.ts | 19 +++++++++++++------ 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/packages/extension/manifest/v3.json b/packages/extension/manifest/v3.json index d51a146c3..0883627e8 100644 --- a/packages/extension/manifest/v3.json +++ b/packages/extension/manifest/v3.json @@ -13,11 +13,17 @@ "default_title": "Alephium", "default_popup": "index.html" }, + "host_permissions": [ + "file://*/*", + "http://*/*", + "https://*/*" + ], "permissions": [ "alarms", "tabs", "storage", "notifications", + "scripting", "http://localhost/*", "https://node.testnet.alephium.org/*", "https://backend.testnet.alephium.org/*", diff --git a/packages/extension/src/background/index.ts b/packages/extension/src/background/index.ts index 976b7f7c7..4b562b676 100644 --- a/packages/extension/src/background/index.ts +++ b/packages/extension/src/background/index.ts @@ -197,3 +197,24 @@ messageStream.subscribe(async ([msg, sender]) => { // open onboarding flow on initial install initOnboarding() + +const registerInPageContentScript = async () => { + try { + await browser.scripting.registerContentScripts([ + { + id: 'inpage', + matches: [""], + js: ['inpage.js'], + runAt: 'document_start', + world: 'MAIN', + allFrames: true, + }, + ]); + } catch (err) { + console.warn(`Dropped attempt to register inpage content script. ${err}`); + } +}; + +if (browser.runtime.getManifest().manifest_version === 3) { + registerInPageContentScript(); +} diff --git a/packages/extension/src/content.ts b/packages/extension/src/content.ts index ecc423df9..94867c82a 100644 --- a/packages/extension/src/content.ts +++ b/packages/extension/src/content.ts @@ -4,14 +4,21 @@ import { WindowMessageType } from "./shared/messages" import { messageStream, sendMessage } from "./shared/messages" const container = document.head || document.documentElement -const script = document.createElement("script") - -script.src = browser.runtime.getURL("inpage.js") const alephiumExtensionId = browser.runtime.id -script.id = "alephium-extension" -script.setAttribute("data-extension-id", alephiumExtensionId) -container.insertBefore(script, container.children[0]) +let tag: HTMLElement +if (browser.runtime.getManifest().manifest_version === 3) { + const divTag = document.createElement("div") + divTag.style.display = 'none' + tag = divTag +} else { + const scriptTag = document.createElement("script") + scriptTag.src = browser.runtime.getURL("inpage.js") + tag = scriptTag +} +tag.id = 'alephium-extension' +tag.setAttribute('data-extension-id', alephiumExtensionId) +container.insertBefore(tag, container.children[0]) window.addEventListener( "message",