我有一个firefox扩展,它有一个用C ++编写的XPCOM组件。以这种方式异步与该组件通信的最佳方式是,组件可以在任何更改时“通知”主应用程序,而不仅仅是响应调用。 主要目标是使用正在与外部系统通信的XPCOM改变信息的UI。 通信必须是异步的,因此每x秒检查一次XPCOM不是一种选择。
我想知道这样一个系统的架构应该是什么样的,我应该使用什么技术(Workers / streaming / ...)。该解决方案应该适用于Firefox 3.5 - 4.0。
我很感激任何帮助。
答案 0 :(得分:0)
例如,如果您不想自行滚动内容,可以使用observer服务。这将是一个典型的发布 - 订阅模式。您的组件将使用notifyObservers()
“发布”通知,然后在observe
声明感兴趣后,前端代码可以addObserver
。
您可以让您的组件公开您自己的一组接口和方法来实现您自己的观察者模式,类似于nsIObserver
所做的(甚至重用nsIObserver
)。例如。 nsIPrefBranch
已经这样做了:它重用nsIObserver
但不使用全局观察服务器,而是跟踪观察者本身。
无论你使用什么,你应该make sure that you dispatch notifications on the main thread,否则任何Javascript前端代码都会保释。