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

转载请注明出处:http://blog.csdn.net/cxf8804

第一份工作的第一个任务,老大让我搞懂webkit的js对象扩展。小弟不才,第一次接触webkit,这两天请教了前辈,总算创建了自己的对象,输出了“Hello World!”。现在跟大家分享下。

通过binding方式

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

修改了一点点,其实大家可以参看webkit里面已经实现的Navigator对象。

WebCore/page/

1.添加MyObject.h文件

#ifndef MyObject_h
#define MyObject_h
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>

namespace WebCore {

class Frame;
class String;

class MyObject : public RefCounted<MyObject> {

	public:
		static PassRefPtr<MyObject> create(Frame* frame)
		{
			return adoptRef(new MyObject(frame));
		}

		~MyObject();

		void disconnectFrame();
		Frame* frame() const { return m_frame; }

		String description() const;
	private:
		MyObject(Frame*);
		Frame* m_frame;
};
}

#endif
2.添加MyObject.cpp文件

#include "MyObject.h"

#include "PlatformString.h"

namespace WebCore {

	MyObject::MyObject(Frame* frame)
		: m_frame(frame)
	{
	}

	MyObject::~MyObject()
	{
		disconnectFrame();
	}

	void MyObject::disconnectFrame()
	{
		m_frame = 0;
	}

	String MyObject::description() const	//对象的属性
	{
		return "Hello World!";
	}
}
3.添加MyObject.idl文件

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

这里还需要在开始添加: class MyObject;

添加如下声明:

public:
	MyObject* myObject() const;
	MyObject* optionalMyObject() const { return m_myObject.get(); }
private:
	mutable RefPtr<MyObject> m_myObject;

5.修改DOMWindow.cpp文件

这里也要加上头文件:#include "MyObject.h"

添加接口实现

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

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

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

添加:

attribute [Replaceable] MyObject MyObject;

7.修改CMakeLists.txt

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值