如何从 firefox 扩展的内容脚本发出 GET 请求?
How do I make a GET request from content script of firefox extension?
我正在为 firefox 构建一个扩展,它向本地 js 服务器发送一个 get 请求,该请求包含到一个 youtube 视频的 url,本地服务器将在 mpv 中打开该视频。
一切正常,除了发出请求的部分,我不知道该怎么做。
- 我在接收端禁用了cors。
- 我在清单中添加了 webRequest。
- 我尝试使用 XMLHttpRequest 和获取。
- 我知道转换函数叫做
- 我知道 url 使用的即时消息格式正确,因为当我在浏览器中进行手动请求时,它们会按预期工作。
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 在看到端口号时的行为似乎有点不同。
我正在为 firefox 构建一个扩展,它向本地 js 服务器发送一个 get 请求,该请求包含到一个 youtube 视频的 url,本地服务器将在 mpv 中打开该视频。 一切正常,除了发出请求的部分,我不知道该怎么做。
- 我在接收端禁用了cors。
- 我在清单中添加了 webRequest。
- 我尝试使用 XMLHttpRequest 和获取。
- 我知道转换函数叫做
- 我知道 url 使用的即时消息格式正确,因为当我在浏览器中进行手动请求时,它们会按预期工作。
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 在看到端口号时的行为似乎有点不同。