gecko中的js扩展

本文介绍了如何在gecko中扩展JavaScript,通过编译生成C++接口,并在nsIDOMWindow.idl中定义属性,nsGlobalWindow类进行相应操作,同时在Makefile中添加实现类。
摘要由CSDN通过智能技术生成
1 创建js对象对应的idl文件
假设要扩展一个hiGecko对象,那么先创建一个idl文件,命名为nsIDOMHiGecko.idl,它的内容如下
#include "nsISupports.idl" 
[scriptable, uuid(9285aaa6-19fd-4fdb-8621-916f856c024f)]
interface nsIDOMHiGecko : nsISupports
{
    attribute long myval ; /*可读可写的属性*/
    boolean getIsOK();     /*一个接口*/
};

2 修改引用的Makefile
这里暂时先用gecko/dom/interfaces/base/Makefile.in
在XPIDLSRCS 变量上加上 nsIDOMHiGecko.idl

3 编译(这步可以先不做,只是可以先编译下,提前看下生成的接口是不是想要的,也可以放到 第6步 编译gecko 一起做)

编译成功后可以查看一下objdir-gecko-cosb2g/dist/include/nsIDOMHiGecko.h文件,里面定义了相应的C++类接口,在它最后的注释里还给出了如何写对应的c++实现



4 编写实现类
实现类有两种实现方式都可以,一种继承安全接口,可以控制哪些接口和属性可以在js里访问,一种不继承安全接口,不具有上面的功能

a)先介绍第二种,不继承安全接口
定义实现类文件nsDOMHiGecko.h, nsDOMHiGecko.cpp
*********nsDOMHiGecko.h的内容************
#ifndef nsDOMHiGecko_h_
#define nsDOMHiGecko_h_
#include "nsIDOMHiGecko.h" 

class nsDOMHiGecko : public nsIDOMHiGecko
{
public:
    NS_DECL_ISUPPORTS //声明com引用计数接口
    NS_DECL_NSIDOMHIGECKO // 声明hiGecko的接口
    nsDOMHiGecko();

protected:
    ~nsDOMHiGecko();

private:
    int32_t mValue;  // hiGecko的属性,用来保存idl里的myval
};
#endif

********nsDOMHiGecko.cpp的内容************
#include "nsDOMHiGecko.h" 
#include "nsDOMClassInfoID.h" 

nsDOMHiGecko::nsDOMHiGecko()
: mValue(0)
{
}

nsDOMHiGecko::~nsDOMHiGecko()
{
}

DOMCI_DATA(DOMHiGecko, nsDOMHiGecko)
NS_INTERFACE_MAP_BEGIN(nsDOMHiGecko)
  NS_INTERFACE_MAP_ENTRY(nsISupports) // 用于com接口查询
  NS_INTERFACE_MAP_ENTRY(nsIDOMHiGecko) // 用于nsIDOMHiGecko接口查询
  NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DOMHiGecko) // 用于classinfo接口查询
NS_INTERFACE_MAP_END

NS_IMPL_ADDREF(nsDOMHiGecko)
NS_IMPL_RELEASE(nsDOMHiGecko)

NS_IMETHODIMP nsDOMHiGecko::GetIsOK(bool *_retval)
{
    *_retval = true;

    return NS_OK;
}

NS_IMETHODIMP nsDOMHiGecko::GetMyval(int32_t *aMyval)
{
    *aMyval = mValue;
    return NS_OK;
}

NS_IMETHODIMP nsDOMHiGecko::SetMyval(int32_t aMyval)
{
    mValue = aMyval;
    return NS_OK;
}

b)继承安全接口的实现方式
头文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值