在 WebExtension 的 fetch 中使用浏览器 cookie

Use the browser cookie in fetch in a WebExtension

我目前正在将一个插件从 Jetpack 移植到 WebExtension API。我需要用数据不断更新浏览器操作(工具栏按钮)(例如设置其徽章文本)。

为此,我想从我的扩展中的 background script 向页面的 API 发出请求,当用户登录时可以访问该页面(即 cookie 是放)。到目前为止我做了什么:

  1. 我给了自己host permissions,据说这是内容脚本请求所必需的。

    然而,content scripts用于将 JS 注入用户访问的页面。

  2. 我创建了一个后台脚本,它使用 fetch 向 API 发出请求。

然而,当从后台脚本查询时,API告诉我没有人登录,而我可以用浏览器完美地访问它。

这是manifest.json的相关部分:

{
  "background": {
    "scripts": ["background.js"]
  },
  "permissions": [
    "*://subdomain.domain.com/*"
  ]
}

我怎样才能有一个连续的 运行 后台脚本,可以使用用户的 cookie 来访问这个 API?

您需要在 fetch()

的参数中提供 credentials 选项

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch

Firefox 对 cookie 有更严格的 cors 限制。我通过在具有相同域的页面上注入的 content-script 进行 api 调用来解决这个问题。该 api 调用生成了一个身份验证令牌,用于从后台页面进行 api 调用,并在后端为包含身份验证令牌的请求启用 cors header.