使用 WebExtensions,我正在尝试编写一个内容脚本来计算每个网页的 HTTP 响应数。
我刚开始研究 WebExtensions,所以我可能完全偏离了轨道,但到目前为止,我的方法是修改后台脚本以收听browser.webRequest.onHeadersReceived
. 一旦触发,对该函数的回调将调用该browser.tabs.sendMessage
响应tabId
的请求来源。
在内容脚本中,我browser.runtime.onMessage.addListener
用来收听来自后台脚本的那些消息。
使用这种方法,我有两个问题:
- 后台脚本甚至在内容脚本开始侦听之前就尝试向内容脚本发送消息,从而导致错误
sendMessage
并因此丢失信息。 - 在页面重新加载时,来自后台脚本的一些消息是在内容脚本重新加载之前收到的,一些消息会丢失(可能是在一个内容脚本被卸载期间和另一个内容脚本启动之前),还有一些是在之后收到的。
我一直在寻找是否browser.storage.local
可以帮助我解决这种情况。有了这个,我可以通过简单地将计数保存在该存储中来避免消息丢失的问题。
但是我仍然在后台脚本中遇到问题,我不知道是增加重新加载发生之前显示的网页的计数,还是增加之后的计数(由于上面的问题 #2)。
我认为与其用作指向计数增加的“指针”,不如为响应所属的网页tabId
设置某种类型的指针会有所帮助。ID
但是我还没有在文档中找到类似的东西。但同样,我是 WebExtensions 的新手,所以我可能缺少一种完全不同的方法。