2

我希望我的网络扩展程序对用户当前正在查看的网站进行 AJAX 调用。我知道当前网站有一个可用的端点/foo/bar?query=

有什么东西阻止我使用fetch APIXMLHttpRequest联系这个端点吗?

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

4

1 回答 1

3

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

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

编辑:
正如 Makyen 所指出的,tabs.currentTab实际上并不是你想要的。而是应该使用tabs.querywith 。active: 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 请求。

你可以在这里阅读更多。

于 2017-07-05T09:08:11.390 回答