【发布时间】:2015-07-15 10:57:26
【问题描述】:
我正在开发一个 Firefox (SDK) 插件,它在某些时候需要打开一个内部页面(所以 resource://<addon_id>/data/path/to/some_page.html)并且仍然能够保留与插件通信的能力。
这是我迄今为止采用的策略,但都失败了。
使用
sdk/tabs.open打开一个新选项卡,并希望self.port可以在脚本的页面上下文中使用,因为它是一个内部页面,并且它们可以监听和发出消息。没用——self根本不可用。使用
sdk/tabs.open打开一个新选项卡并注入内容脚本。self这次是可用,但是没有消息发送到插件或从插件接收。这似乎是某种安全措施。有趣的是,发送或接收消息的失败是静默的,因此没有消息转储到控制台。使用
sdk/tabs.open打开一个新选项卡,直接访问选项卡的 (DOM)window对象并通过window.postMessageAPI 发送/接收消息。这似乎需要调用getBrowserForTab,然后访问contentWindow.wrappedJSObject。但是,在sdk/tabs.open调用的onOpened处理程序中调用getBrowserForTab会返回undefined。
我被困住了。
使用panel 来实现这一点似乎要容易得多,但是由于页面需要是无模式的,因此我无法使用此策略。如何实现?
【问题讨论】:
标签: firefox firefox-addon firefox-addon-sdk