2012-07-08 70 views
1

我试图构建一个插件,它将观察并收集页面上收到的XHR和图像响应,并使它们可供页面脚本(在该页面上)进一步检查。从页面代码访问特定的扩展对象数据

在我的“HTTP上审视响应”观察者的代码,我推网址,我感兴趣的是,到一个数组他们相关的窗口,成为一个对象,这样的事情 -

myWindowId = resp.outerWindowID+'-'+resp.currentInnerWindowID; storedResponses[myWindowId].push(subject.URI.spec);

(我认为这种方法可能比使用标签引用来识别唯一的源窗口更好)

当任何页面发出请求时,相关数组会自动更新。

我希望能够随时从页面脚本或书签页查询相关数组。

我应该在页面/小书签,内容脚本和扩展之间设置port.on ...或postMessage()通信,还是使用pageMod将相应的数组直接写入相关页面上的unsafeWindow全局对象?

我无法弄清楚如何在观察到新的响应后立即将特定数组写入特定数组。

完整的源在这里 - https://builder.addons.mozilla.org/addon/1064905/latest/

我认为这是所有工作,除了获取数据回页面。

+0

是,分享你的代码迄今将帮助!您应该能够通过worker.postMessage(data)或worker.port.emit('event',data)将收集的任何数据发送到页面。棘手的部分是跟踪您创建的工作人员并正确识别要将数据发送到的工作人员。 – canuckistani 2012-07-08 14:53:44

+0

嗨@canuckistani感谢您的帮助。我添加了一个链接到附加组件生成器代码。 – Nils 2012-07-08 23:34:21

+1

注意:您应该使用[弱地图](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/WeakMap),而不是直接处理窗口ID。这种方法也将确保您的扩展不会泄漏内存。 – 2012-07-09 07:08:29

回答

0

在Wladimir Palant的帮助下,我发现XPCNativeWrapper.unwrap()被定义了,并且从SDK模块上下文中做了我所需要的。它允许我直接在我的插件窗口中设置变量。关于包装

更多信息在这里 - https://developer.mozilla.org/en/XPCNativeWrapper