如何从 firefox 扩展的内容脚本发出 GET 请求?

How do I make a GET request from content script of firefox extension?

我正在为 firefox 构建一个扩展,它向本地 js 服务器发送一个 get 请求,该请求包含到一个 youtube 视频的 url,本地服务器将在 mpv 中打开该视频。 一切正常,除了发出请求的部分,我不知道该怎么做。

manifest.json:

{
  "manifest_version": 2,
  "name": "Youtube Caster",
  "version": "1.0",
  "description": "My own casting plugin",
  "icons": {
    "32": "icons/youtube-32.png"
  },
    "permissions": [
    "*://www.youtube.com/*",
    "activeTab",
    "webRequest"
    ],
  "browser_action": {
    "browser_style": true,
    "default_icon": "icons/youtube-32.png",
        "default_title": "Caster",
        "default_popup": "popup/cast_video.html"
    }
}

我的内容脚本: (只显示应该发出请求的函数)

function cast() {
    const url = "http://127.0.0.1:8080/play?url="
    const videoURL = window.location.href;
    console.log("casting... ", url+videoURL)

    fetch(url+videoURL);

}

我希望请求在函数被调用时通过,但它没有,我的本地服务器没有收到任何东西。

尝试在您的权限中包含 "http://localhost/*""http://127.0.0.1:8080/*"。参考here.

经过更多阅读,我发现您不应该在权限中使用端口,并且内容脚本只能在端口 80 上发出请求。 所以在将我的服务器运行的端口更改为 80 后,一切都按预期工作。

refrence

我觉得值得一提的是我为什么要使用完整 url。 我正在尝试构建一个系统,允许我将 "cast" 视频传输到我网络上的另一台电脑,与 chromecast 的工作方式相当。 因此,仅发送 youtube 视频 ID 会限制我仅将此系统用于 youtube,但是通过使用完整的 url,每个具有 html5 播放器的网页都会变成 'castable'。

感谢大家的回复!

我发现了这个:

Note: The path pattern string should not include a port number. Adding a port, as in: "http://localhost:1234/" causes the match pattern to be ignored. However, "http://localhost:1234" will match with "http://localhost/"

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns

Firefox 和 Chrome 在看到端口号时的行为似乎有点不同。

https://bugzilla.mozilla.org/show_bug.cgi?id=1362809