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

当我们实现了一个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++ 实现:

  同下文WebIDL 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

转载于:https://www.cnblogs.com/code-4-fun/p/4654850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值