From 4ae6d8135fe5f32cfdb814f037294bb08361945d Mon Sep 17 00:00:00 2001
From: Patryk Kuniczak
Date: Mon, 13 Apr 2026 15:47:24 +0200
Subject: [PATCH] fix: Scripts injection for MV2 (#2232)
---
packages/wxt-demo/wxt.config.ts | 2 +-
packages/wxt/src/utils/inject-script.ts | 8 ++++++--
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/packages/wxt-demo/wxt.config.ts b/packages/wxt-demo/wxt.config.ts
index 9537d11e..014e3ef1 100644
--- a/packages/wxt-demo/wxt.config.ts
+++ b/packages/wxt-demo/wxt.config.ts
@@ -10,7 +10,7 @@ export default defineConfig({
web_accessible_resources: [
{
resources: ['iframe-src.html', 'unlisted.js'],
- matches: ['*://*.google.com/*'],
+ matches: ['*://*.google.com/*', '*://*.example.com/*'],
},
],
},
diff --git a/packages/wxt/src/utils/inject-script.ts b/packages/wxt/src/utils/inject-script.ts
index d0f887fb..81007db0 100644
--- a/packages/wxt/src/utils/inject-script.ts
+++ b/packages/wxt/src/utils/inject-script.ts
@@ -26,7 +26,9 @@ export async function injectScript(
const url = browser.runtime.getURL(path);
const script = document.createElement('script');
- if (browser.runtime.getManifest().manifest_version === 2) {
+ const isManifestV2 = browser.runtime.getManifest().manifest_version === 2;
+
+ if (isManifestV2) {
// MV2 requires using an inline script
script.text = await fetch(url).then((res) => res.text());
} else {
@@ -34,7 +36,9 @@ export async function injectScript(
script.src = url;
}
- const loadedPromise = makeLoadedPromise(script);
+ // For MV2: Inline scripts execute synchronously when appended
+ // For MV3: We need to wait for the load event
+ const loadedPromise = isManifestV2 ? undefined : makeLoadedPromise(script);
await options?.modifyScript?.(script);