【问题标题】:Firefox WebExtensions API how to make AJAX call to current tab websiteFirefox WebExtensions API 如何对当前选项卡网站进行 AJAX 调用
【发布时间】:2017-12-08 00:41:03
【问题描述】:

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

是否有什么阻止我使用fetch APIXMLHttpRequest 联系此端点?

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

【问题讨论】:

  • edit 成为主题的问题:包括一个重复问题的minimal reproducible example。对于 Chrome 扩展程序或 Firefox WebExtensions,这几乎总是意味着包含您的 manifest.json 和一些背景、内容和/或弹出脚本/HTML。寻求调试帮助的问题(“为什么这段代码没有按我想要的方式工作?”)必须包括:(1)期望的行为,(2)特定的问题或错误以及(3)重现它所需的最短代码在问题本身中。另请参阅:What topics can I ask about here?How to Ask

标签: javascript ajax google-chrome-extension firefox-addon-webextensions browser-tab


【解决方案1】:

您可以使用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>"
  ],
  ...
}

&lt;all_urls&gt;for 例如将允许您向任何 url 发出 http 请求。

您可以阅读更多here

【讨论】:

  • 你测试过这段代码吗?每当我尝试发出 XMLHttpRequest 时,我似乎都会遇到错误。
  • 我没有测试过。不过,它应该可以工作。您收到的错误信息是什么?您是否在 manifest.json 中设置了所需的权限?
  • tabs.getCurrent() 获取运行代码的当前选项卡。在大多数情况下,不会是用户正在查看的页面的 URL,除非他们正在查看您的扩展选项页面,或者来自扩展内的其他 HTML 页面。如果您想要当前窗口的活动选项卡,请使用chrome.tabs.query({active: true, currentWindow: true},callback)
  • 好的,我已经测试过了,问题是您无法向当前页面发出请求:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://example.com. (Reason: CORS header 'Access-Control-Allow-Origin' missing). 我有点希望允许对此进行扩展。
  • 我找到了解决方案!看起来只要您获得许可,它就可以工作。谢谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多