zoukankan      html  css  js  c++  java
  • (FFOS Gecko)

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

  • 相关阅读:
    python截取视频中的某一段,保存为avi结尾的视频
    文章内容过长,将此内容转为pdf的方式(使用node)
    typescript常见问题集锦
    利用matplotlib中imshow()函数绘图
    如何查看Linux系统安装时间
    php包含那点事情[WOOYUN]
    中间人攻击利用框架bettercap测试
    java 递归方法
    java方法重载
    JVM 之栈结构
  • 原文地址:https://www.cnblogs.com/code-4-fun/p/4654850.html
Copyright © 2011-2022 走看看