开发浏览器扩展时出现报错:

only a single offscreen document may be created.
我是要将一个 MV2 扩展迁移到 MV3.
在 Chrome 下运行政策,但 Edge 下报错了。
Edge 版本: 129.0.2792.52 (正式版本) (64 位)

经排查发现了问题,如下代码是在创建 offscreen document 前进行判断,防止重复创建:

  const offscreenUrl = chrome.runtime.getURL(path);
  const existingContexts = await chrome.runtime.getContexts({
    contextTypes: ["OFFSCREEN_DOCUMENT"],
    documentUrls: [offscreenUrl],
  });

chrome.runtime.getURL(path);在两个浏览器中表现异常:

  • chrome 下:
    chrome.runtime.getURL("./offscreen.html"); // 'chrome-extension://abopbmceehjmafdcffmlcifgladodjam/offscreen.html'
  • edge 下:
    chrome.runtime.getURL("./offscreen.html"); // 'chrome-extension://abopbmceehjmafdcffmlcifgladodjam/./offscreen.html'

由于 edge 中的路径拼接问题导致判断失误,从而重复创建了 document 引发故障。

补充:
Edge 版本 134.0.3124.93 (正式版本) (64 位) 未出现上述bug。

将路径格式修改传参即可:
chrome.runtime.getURL("offscreen.html");

posted on 2025-03-30 19:24  死宅程序员  阅读(42)  评论(0)    收藏  举报