首页 > 其他 > 详细

(FFOS Gecko) - several ways of exposing a module to navigator

时间:2015-07-17 18:25:09      阅读:172      评论:0      收藏:0      [点我收藏+]

当我们实现了一个module,并且通过navigator.mozCustomModule访问

根据module的实现方式的不同,有几种不同的做法。

1. XPCOM component(Javascript实现): 

  在chrome.manifest中配置(加粗部分):

component {ComponentID} CustomModule.js
contract ContractID {ComponentID}
category JavaScript-navigator-property mozCustomModule ContractID

  以TCPSocket为例:

component {cda91b22-6472-11e1-aa11-834fec09cd0a} TCPSocket.js
contract @mozilla.org/tcp-socket;1 {cda91b22-6472-11e1-aa11-834fec09cd0a}
category JavaScript-navigator-property mozTCPSocket @mozilla.org/tcp-socket;1

 

2. XPCOM C/C++ 实现:

 

3. WebIDL Javascript实现:

  在定义webidl时,通过NavigatorProperty来指定(加粗部分):

[NavigatorProperty="mozCustomModule"]
interface CustomModule {
    // methods and properties definition 
};

  以Alarms为例:

[NavigatorProperty="mozAlarms",
 JSImplementation="@mozilla.org/alarmsManager;1",
 CheckPermissions="alarms",
 Pref="dom.mozAlarms.enabled"]
interface AlarmsManager {
  DOMRequest getAll();
  DOMRequest add(any date, DOMString respectTimezone, optional any data);
  void remove(unsigned long id);
};

 

4. WebIDL C/C++ 实现:

  此中情形略微复杂,需要手动写一些code。

  (1)在gecko/dom/webidl/Navigator.webidl中添加一个属性:

partial interface Navigator {
  readonly attribute CustomModule mozCustomModule;
};

  (2)在gecko/dom/base/Navigator.h中声明一个方法:

// 注意方法名:Get + 属性名(第一个字母大写)
CustomModule* GetMozCustomModule(ErrorResult& aRv);

  (3)在gecko/dom/base/Navigator.cpp中实现上一步声明的方法:

CustomModule* GetMozCustomModule(ErrorResult& aRv) {
  return new CustomModule();      
}

 

TODO:

  sample code

(FFOS Gecko) - several ways of exposing a module to navigator

原文:http://www.cnblogs.com/code-4-fun/p/4654850.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!