Chrome扩展程序管理webRequest有效期

时间:2017-07-01 16:40:25

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

我正在制作一个需要捕获定向到网站的POST数据的扩展程序,一旦网站响应确认成功,就会更改一些本地数据以反映它。

问题是,POST数据位于来自onBeforeRequest事件的requestBody中,而成功确认位于onCompleted事件中。我理解webRequest的生命周期应使用其唯一的requestId进行管理,但我使用的是Event Page,因此试图避免使用全局变量。

eventPage.js:

function continueListening(requestDetails){     
    function finishListening(completeDetails){    
        if (completeDetails.requestId === requestDetails.requestId){
            doStuff(requestDetails, completeDetails); 
            chrome.webRequest.onErrorOccurred.removeListener(finishListening);
            chrome.webRequest.onCompleted.removeListener(finishListening);
        }
    }
    chrome.webRequest.onErrorOccurred.addListener(finishListening,{urls:["*://site*"]});
    chrome.webRequest.onCompleted.addListener(finishListening, {urls:["*://site*"]});
}

chrome.webRequest.onBeforeRequest.addListener(continueListening, {urls:["*://site*"]});

我决定尝试为最终请求嵌套侦听器注册,以便为它们提供将requestIds与包含表单数据的初始请求进行比较的范围。这似乎有效,但是我担心在解析webRequest和嵌套侦听器的注册之间存在潜在的竞争条件,这些侦听器旨在监听它,导致任意数量的无用的未删除的侦听器。

我看到的另一个选项是将requestDetails存储在chrome.storage.local中,并在它们到达时针对completeDetails进行检查。我主要的犹豫是,如果由于某种原因执行被中断,本地磁盘空间可能会被未解决的请求污染。

有更好的方法吗?

编辑:不幸的是,虽然我相信我正在创建一个事件页面,但我没有持久性:在我的清单中是假的。正如我在添加它时所了解到的那样,事件页面甚至不支持webRequests。事件页等效,声明性WebRequest似乎已经在测试版频道中死亡。因此,将其作为背景页面似乎是必要的解决方案。

0 个答案:

没有答案