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);