我正在编写一个firefox扩展名,想要捕获发送到某个URL的请求。
我正在从后台脚本向事件browser.webRequest.onCompleted
添加一个侦听器。问题是,仅当我在清单的权限部分添加<all_urls>
并在添加侦听器时在过滤器的urls选项中添加侦听器时才会触发。
src / background.js:
function saveData(result) {
console.log(result);
}
browser.webRequest.onCompleted.addListener(
saveData,
{
urls: ["<all_urls>"],
types: ['xmlhttprequest']
});
Manifest.json:
{
"manifest_version": 2,
"name": "LolEsports Extension",
"version": "1.0.0",
"permissions": [
"<all_urls>",
"webRequest",
"webRequestBlocking",
"storage"
],
"background": {
"scripts": ["src/background.js"]
}
}
这就是我得到的:
但是如果我将清单更改为:
"permissions": [
"https://prod-relapi.ewp.gg/persisted/gw/*",
"webRequest",
"webRequestBlocking",
"storage"
]
和background.js中的
browser.webRequest.onCompleted.addListener(
saveData,
{
urls: ["https://prod-relapi.ewp.gg/persisted/gw/*"],
types: ['xmlhttprequest']
});
控制台中未显示任何内容。我想念什么,以便在特定的网址格式上启动监听器?
答案 0 :(得分:2)
要拦截页面加载的资源(例如图像,脚本或样式表),扩展名必须具有资源以及请求资源的主页的主机权限。例如,如果位于“ https://developer.mozilla.org”的页面从“ https://mdn.mozillademos.org”加载图像,则扩展名必须具有两个主机权限才能拦截图像请求。
Quoting Chrome API documentation:
从Chrome 72开始,扩展程序只有在对请求的URL和请求启动器都具有主机权限的情况下,才能拦截请求。
因此,您需要在清单的"https://watch.euw.lolesports.com/*"
中添加"permissions"
。