1

我希望我的Web扩展可以对用户当前正在查看的网站进行AJAX调用。我知道当前网站的终端号码为/foo/bar?query=Firefox WebExtensions API如何使AJAX调用到当前选项卡网站

有没有什么东西阻止我使用fetch APIXMLHttpRequest联系此端点?

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

+0

请编辑题目:包括一个复制问题的[mcve]。对于Chrome扩展程序或Firefox WebExtensions,这通常意味着包含您的* manifest.json *以及一些背景,内容和/或弹出式脚本/ HTML。寻求调试帮助的问题(“为什么代码不按我想要的方式工作?”)必须包括:(1)期望的行为,(2)特定问题或错误,以及(3)重现它所需的最短代码*在问题本身*。另请参阅:[我可以在这里询问什么主题?](http://stackoverflow.com/help/on-topic)和[问]。 – Makyen

回答

1

您可以使用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

+0

你测试过这段代码吗?每当我尝试创建XMLHttpRequest时,我似乎都会遇到错误。 – Harvey

+1

我没有测试过它。它应该工作,但。什么是你得到的错误信息?你有没有在你的manifest.json中设置所需的权限? – Forivin

+1

['tabs.getCurrent()'](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/getCurrent)获取代码运行的当前选项卡。在大多数情况下,* *不会是用户正在查看的网页的网址,除非他们正在查看您的扩展选项页面或来自扩展内部的其他HTML页面。如果你想使用'chrome.tabs.query({active:true,currentWindow:true},callback)'当前窗口的活动标签''。 – Makyen

相关问题