首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浏览器扩展后台模块

浏览器扩展后台模块
EN

Stack Overflow用户
提问于 2022-02-11 13:07:21
回答 1查看 393关注 0票数 1

我正在开发一个运行后台脚本的浏览器扩展。到目前为止,我已经完成了所有的工作。我的问题是我需要在我的后台脚本中使用一个模块。当我编写导入语句时,我得到了以下异常:

代码语言:javascript
复制
Uncaught SyntaxError: import declarations may only appear at top level of a module

如何将背景脚本转换为模块?

Manifest.json

代码语言:javascript
复制
{
  "name": "Extension Demo",
  "version": "1.0",
  "description": "Build an Basic Extension!",
  "permissions": [
    "activeTab",
    "webRequest",
    "webRequestBlocking",
    "<all_urls>"
  ],
  "browser_action": {
    "default_popup": "index.html",
    "default_icon": {
      "16": "img/icon16.png",
      "32": "img/icon32.png",
      "48": "img/icon48.png"
    }
  },
  "manifest_version": 2,
  "background": {
    "scripts": [ "background.js" ]
  }
}

bakground.js

代码语言:javascript
复制
import * as myMod from './myMod.js'


function redirect(requestDetails) {
    //do some awesome stuff
}

browser.webRequest.onBeforeRequest.addListener(
    redirect,
    { urls: ["<all_urls>"], types: ["page"] },
    ["blocking"]
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-11 14:19:31

您正在使用清单V2,我强烈建议将舱单v3更新为最新特性和错误修复。

manifest.json文件中,在对象内传递"type": "module"以允许ESM导入。

代码语言:javascript
复制
"background": {
    "service_worker": "background.js",
    "type": "module"
}

或者,如果您仍然希望使用V2,则使用动态导入。请记住,这些返回承诺,您将不得不等待它或使用.then()语句。

代码语言:javascript
复制
(async () => {

  const myMod = await import("./myMod.js");
  // if myMod.js uses an `export default` statement, use `(await import("./myMod.js")).default` instead.

  function redirect(requestDetails) {
    //do some awesome stuff
  }

  browser.webRequest.onBeforeRequest.addListener(
    redirect,
    { urls: ["<all_urls>"], types: ["page"] },
    ["blocking"]
  );
})();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71080619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档