我希望我的网络扩展程序对用户当前正在查看的网站进行 AJAX 调用。我知道当前网站有一个可用的端点/foo/bar?query=
。
有什么东西阻止我使用fetch API或XMLHttpRequest联系这个端点吗?
我尝试使用这些方法只是告诉我发生了服务器错误,而当我尝试调试我的扩展时,网络选项卡中没有出现任何内容。我觉得这个任务应该有一个 WebExtensions API,但我找不到。
我希望我的网络扩展程序对用户当前正在查看的网站进行 AJAX 调用。我知道当前网站有一个可用的端点/foo/bar?query=
。
有什么东西阻止我使用fetch API或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.query
with 。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 请求。
你可以在这里阅读更多。