码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-17 18:26:11      阅读:116      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!