2013-12-17 51 views
0

我正在创建一个简单的插件来捕获http请求并将其保存到文件中。保存模块也可以工作并捕获模块。属于每个窗口的所有http请求都保存为单独的文件。例如,所有来自窗口1的任何选项卡的http请求保存到文件1.txt,从窗口2保存到文件2.txt等。 但现在我有问题,因为来自窗口2,3的请求,...保存也到以前的文件。我的意思是:观察并保存firefox扩展中的http请求

  1. 从窗口1所有HTTP请求保存到1.txt的(这是确定)
  2. 从窗口2保存到1.txt的所有HTTP请求和2.txt
  3. 从窗口全部的http请求3保存为1.txt,2.txt和3.txt

我使用观察者,但为了测试我使用eventListener进行点击,任何工作都很完美。从窗口点击x仅保存文件x。任何想法,有什么可能是错的?

回答

1

观察员是全球性的,而不是每个窗口。当你从覆盖脚本注册它们时,每个窗口都会有一个观察者,并且每个观察者都会得到关于所有 http连接的通知,无论请求来自哪个窗口(记住:观察者都是全局的)。哦,并且每个观察者也会在没有任何关联窗口的每个请求(例如,安全浏览请求刷新,其他组件,其他组件以及从它们的代码模块执行请求的其他附件)上得到每个通知。

你应该做到以下几点:

  • 重写代码只能注册为整个应用程序只有一个观察者。最简单的方法是在a code module中实现它。
  • 让观察者找出DOM窗口,如果有的话,顶层窗口(如果有的话),并将其映射到特定文件。我已经给了一些代码in another answer将请求映射到http观察者中的DOMWindow和顶级窗口。
  • 如何将请求映射到窗口和文件最终取决于您。您可以用您的代码模块注册每个顶级窗口,然后您的代码模块会为每个窗口生成一个ID /文件名,然后在observe中使用该信息将请求窗口映射到ID和文件,...
+0

好吧它有道理。我会明天尝试这个解决方案,但顺便说一句,如何实现与jsm观察员?我无法在您的MDN链接中找到它 –

+1

与在叠加层中实现观察者一样 – nmaier