如何在Firefox扩展中捕获特定的xmlhttprequests?

时间:2019-02-15 09:11:12

标签: javascript google-chrome-extension firefox-webextensions

我正在编写一个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"]
    }
}

这就是我得到的: screenshot

但是如果我将清单更改为:

"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']
    });

控制台中未显示任何内容。我想念什么,以便在特定的网址格式上启动监听器?

1 个答案:

答案 0 :(得分:2)

Quoting MDN

  

要拦截页面加载的资源(例如图像,脚本或样式表),扩展名必须具有资源以及请求资源的主页的主机权限。例如,如果位于“ https://developer.mozilla.org”的页面从“ https://mdn.mozillademos.org”加载图像,则扩展名必须具有两个主机权限才能拦截图像请求。

Quoting Chrome API documentation

  

从Chrome 72开始,扩展程序只有在对请求的URL和请求启动器都具有主机权限的情况下,才能拦截请求。

因此,您需要在清单的"https://watch.euw.lolesports.com/*"中添加"permissions"