FFOS gecko 添加javascript 实现的webapi

向FFOS添加webidl

webidl简介

Web IDL(Interface Definition Language,接口定义语言)该规范定义了一个OMG IDL 3.0的语法子集,用来规范定义的接口。Web IDL 是一个具有多种功能的IDL 变量,便于规范Web平台中的常用脚本对象的操作。

webidl xpidl ipdl 区别

webidl:接口定义文件后缀为.webidl,用于定义webapi,比如gecko/dom/webidl/FMRadio.webidl

xpidl:接口定义文件后缀为.idl,用于定义xpcom组件接口,比如gecko/dom/wifi/nsIWifi.idl

ipdl:接口定义文件后缀为.ipdl,用于定义进程间通信接口,帮助geckowebidl接口的实现,比如gecko/dom/fmradio/ipc/PFMRadio.ipdl

Gecko内部使用最多的还是基于XPConnect上的DOM Bindings,使用ScriptableHelper来帮助把XPCOM组件暴露在JavaScript上,但这种方式有一些内存管理和速度上的缺点,并且XPIDLXPCOM界面定义语言)与WebIDLWeb界面定义语言)在语义上有一定的不同,会使各种加速方法和处理语义问题的 Wrapper需要手工地针对不同API进行修改。

因为XPIDL的一些问题,Firefox OS里还提供一种DOM bindings的方法。由于这个问题是在法国巴黎首次讨论的,所以最早被称为“Paris Bindings”。因为这些DOM API实际上不使用XPCOM的许多功能,所以它的速度比原有的XPConnect会快许多。通过WebIDL DOM bindings可以省略掉一些虚函数的开销,还可以节省掉XPCOM处理线程安全的花费,透过新的JIT技术,从JavaScript可以调用DOM API,甚至直接调用C++的实现。未来描述DOM API的语言可能统一为WebIDL

http://www.programmer.com.cn/15789/

 

如何向ffos 添加JS 实现的webidl

1.      编写webidl文件

在gecko/dom/webidl 目录下面编写webidl文件

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */

/* This Source Code Form is subject to the terms of the Mozilla Public

 * License, v. 2.0. If a copy of the MPL was not distributed with this file,

 * You can obtain one at http://mozilla.org/MPL/2.0/.

 */

[JSImplementation="@mozilla.org/mytest;1",

 NavigatorProperty="mytest"

]

 

interface MyTest {

  DOMString sayHello();

};

 

‘@mozilla.org/mytest;1 ‘                   contractname,之后和js实现绑定。

NavigatorProperty             设置为navigator的属性

2.      编写manifest文件

在gecko/dom/mytest/ 中创建 MyTest.manifest 文件。

在MyTest.manifest文件中,将webidl接口与javascript实现绑定。

MyTest.manifest 文件如下:

component {50CD146F-75EE-4C5E-88FA-FB3871362156} MyTest.js

contract @mozilla.org/mytest;1 {50CD146F-75EE-4C5E-88FA-FB3871362156}

 

定义 一个component,然后将其与 @mozilla.org/mytest;1绑定

 

3.      编写js 文件,MyTest.js

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");

function MyTest(){

    dump("zyt mytest constractor");

}

 

MyTest.prototype = {

    classDescription: "zyt test xpcom",

        classID: Components.ID("{50CD146F-75EE-4C5E-88FA-FB3871362156}"),

        contractID: "@mozilla.org/mytest;1",

    QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsISupports]),

        sayHello : function(){

           dump("this is zyt test to say hello");

           return"this is my first webidl test";

        },

};

 

this.NSGetFactory= XPCOMUtils.generateNSGetFactory([MyTest]);

 

4.      创建dom/mytest/moz.build 文件

# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-

# vim: set filetype=python:

# This Source Code Form is subject to the terms of the Mozilla Public

# License, v. 2.0. If a copy of the MPL was not distributed with this

# file, You can obtain one at http://mozilla.org/MPL/2.0/.

 

EXTRA_COMPONENTS += [

    'MyTest.js',

    'MyTest.manifest',

]

注:该文件必须按字母序排列。否则编译出错。

5.      修改dom/moz.build文件

diff --git a/dom/moz.build b/dom/moz.build

--- a/dom/moz.build

+++ b/dom/moz.build

@@ -81,6 +81,7 @@ PARALLEL_DIRS += [

     'webidl',

     'xbl',

     'xslt',

+    'mytest',

 ]

 

 if CONFIG['OS_ARCH'] == 'WINNT':

 

6.      添加到Firefox OS

修改 gecko/b2g/installer/package-manifest.in:

;my test

@BINPATH@/components/MyTest.js

@BINPATH@/components/MyTest.manifest

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值