我希望我的Web扩展可以对用户当前正在查看的网站进行AJAX调用。我知道当前网站的终端号码为/foo/bar?query=
。Firefox WebExtensions API如何使AJAX调用到当前选项卡网站
有没有什么东西阻止我使用fetch API或XMLHttpRequest联系此端点?
我试图使用这些方法只是告诉我发生了一个服务器错误,当我试图调试我的扩展时,网络选项卡中没有任何东西出现。我觉得这个任务应该有一个WebExtensions API,但我找不到。
我希望我的Web扩展可以对用户当前正在查看的网站进行AJAX调用。我知道当前网站的终端号码为/foo/bar?query=
。Firefox WebExtensions API如何使AJAX调用到当前选项卡网站
有没有什么东西阻止我使用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
而使用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>
例如将允许你做出HTTP请求任何网址。
您可以阅读更多here。
你测试过这段代码吗?每当我尝试创建XMLHttpRequest时,我似乎都会遇到错误。 – Harvey
我没有测试过它。它应该工作,但。什么是你得到的错误信息?你有没有在你的manifest.json中设置所需的权限? – Forivin
['tabs.getCurrent()'](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/getCurrent)获取代码运行的当前选项卡。在大多数情况下,* *不会是用户正在查看的网页的网址,除非他们正在查看您的扩展选项页面或来自扩展内部的其他HTML页面。如果你想使用'chrome.tabs.query({active:true,currentWindow:true},callback)'当前窗口的活动标签''。 – Makyen
请编辑题目:包括一个复制问题的[mcve]。对于Chrome扩展程序或Firefox WebExtensions,这通常意味着包含您的* manifest.json *以及一些背景,内容和/或弹出式脚本/ HTML。寻求调试帮助的问题(“为什么代码不按我想要的方式工作?”)必须包括:(1)期望的行为,(2)特定问题或错误,以及(3)重现它所需的最短代码*在问题本身*。另请参阅:[我可以在这里询问什么主题?](http://stackoverflow.com/help/on-topic)和[问]。 – Makyen