Firefox WebExtensions API 如何 AJAX 调用当前选项卡网站

Firefox WebExtensions API how to make AJAX call to current tab website

我希望我的 Web 扩展对用户当前正在查看的网站进行 AJAX 调用。我知道当前网站在 /foo/bar?query=.

有一个端点可用

有什么东西阻止我使用 fetch API or an XMLHttpRequest 联系这个端点吗?

我尝试使用这些方法只是告诉我发生了服务器错误,而在我尝试调试我的扩展程序时网络选项卡中没有显示任何内容。我觉得这个任务应该有一个 WebExtensions API,但我找不到。

您可以使用 browser.tabs.getCurrent() 获取描述用户正在查看的当前选项卡的对象。该对象有一个 属性 url,然后您可以使用它来创建 XMLHttpRequest。

browser.tabs.getCurrent().then(currentTab => {
    let xhr = new XMLHttpRequest();
    xhr.open("GET", currentTab.url);
    // ...
});

编辑:
正如 Makyen 所指出的,tabs.currentTab 实际上并不是您想要的。相反,应该使用 tabs.queryactive: true。类似的东西应该可以工作:

browser.tabs.query({active: true, currentWindow: true}).then(tabs => {
    let currentTab = tabs[0];
    let xhr = new XMLHttpRequest();
    xhr.open("GET", currentTab.url);
    // ...
})

为了发出跨源请求,您需要在 manifest.json 文件中获得许可:

{
  ...
  "permissions": [
    "tabs",
    "<all_urls>"
  ],
  ...
}

<all_urls>例如将允许您向任何 url.

发出 http 请求

您可以阅读更多内容here