webkit的js对象扩展(一)——binding方式创建自定义对象(单实例)

通过binding方式

要扩展一个全局JS对象除了要为webkit添加这个对象的头文件和cpp文件外,还需要为这个对象写一个idl文件以便webkit自动生成相应的代码;另外,还需要修改DOMWindow.*以便把新对象注册上去。下面以MyObject对象为例介绍具体步骤。

WebCore/page/

1.添加MyObject.h文件

  1. #ifndef MyObject_h  
  2. #define MyObject_h  
  3. #include <wtf/PassRefPtr.h>  
  4. #include <wtf/RefCounted.h>  
  5. #include <wtf/RefPtr.h>  
  6.   
  7. namespace WebCore {  
  8.   
  9. class Frame;  
  10. class String;  
  11.   
  12. class MyObject : public RefCounted<MyObject> {  
  13.   
  14.     public:  
  15.         static PassRefPtr<MyObject> create(Frame* frame)  
  16.         {  
  17.             return adoptRef(new MyObject(frame));  
  18.         }  
  19.   
  20.         ~MyObject();  
  21.   
  22.         void disconnectFrame();  
  23.         Frame* frame() const { return m_frame; }  
  24.   
  25.         String description() const;  
  26.     private:  
  27.         MyObject(Frame*);  
  28.         Frame* m_frame;  
  29. };  
  30. }  
  31.   
  32. #endif  
2.添加MyObject.cpp文件

  1. #include "MyObject.h"  
  2.   
  3. #include "PlatformString.h"  
  4.   
  5. namespace WebCore {  
  6.   
  7.     MyObject::MyObject(Frame* frame)  
  8.         : m_frame(frame)  
  9.     {  
  10.     }  
  11.   
  12.     MyObject::~MyObject()  
  13.     {  
  14.         disconnectFrame();  
  15.     }  
  16.   
  17.     void MyObject::disconnectFrame()  
  18.     {  
  19.         m_frame = 0;  
  20.     }  
  21.   
  22.     String MyObject::description() const    //对象的属性  
  23.     {  
  24.         return "Hello World!";  
  25.     }  
  26. }  
3.添加MyObject.idl文件

  1. module window {  
  2.     interface MyObject {  
  3.         readonly attribute DOMString description;  
  4.     };  
  5. }  
4.修改DOMWindow.h文件

添加如下声明:

  1. public:  
  2.     MyObject* myObject() const;  
  3.     MyObject* optionalMyObject() const { return m_myObject.get(); }  
  4. private:  
  5.     mutable RefPtr<MyObject> m_myObject;  
5.修改DOMWindow.cpp文件

添加接口实现

  1. MyObject* DOMWindow::myObject() const  
  2. {  
  3.     if (!m_myObject)  
  4.         m_myObject = MyObject::create(m_frame);  
  5.     return m_myObject.get();  
  6. }  
修改部分函数实现

void DOMWindow::clear()函数中添加:

  1. if (m_myObject)  
  2.     m_myObject->disconnectFrame();  
  3. m_myObject = 0;  
6.修改DOMWindow.idl文件

添加:

  1. attribute [Replaceable] MyObject MyObject;  

7.修改CMakeLists.txt

将MyObject.cpp、MyObject.idl加入编译。

OK。以上步骤就添加了一个自定义的全局对象。这是单实例的,有时间了再把多实例的过程写下,也就是可以new了。

小弟新手,有问题请大家多多指教。

 

转自http://blog.csdn.net/perfectpdl/article/details/7051129

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值