您的位置:首页 > 编程语言 > Qt开发

QT Webkit 添加JS对象

2011-11-10 15:48 190 查看
由于QWebFrame 提供了一个addToJavaScriptWindowObject()接口, 所以在QT Webkit下添加一个自定义的

Javascript对象就变得非常的容易,要注意在跨页面的时候,该对象会被清除,所以你只要重新加回来

就可以了, 这一点跟GTK类似, 只要捕获WindowObjectCleared信号,在该信号处理函数里面执行

addToJavaScriptWindowObject()就可以了。

这种方法不用去修改Webkit的核心代码WebCore或者JavascriptCore, 所有工作都在应用层面实现,

可以说是简单又实用。

具体可以参考如下源代码:

// 实现一个新类
class QFoo : public QObject
{
Q_OBJECT
public:
QFoo(QObject *parent) {}
void initialize(QWebView *wv);

public slots:
void print(const QString &msg);

private slots:
void addObject();

private:
QWebFrame *wf;
};

void QFoo::initialize(QWebView *wv)
{
wf = wv->page()->mainFrame();
// Add to the javascript window object
addObject();
// connect the signal for javascript window object cleared, which happened
// at page switching etc.
connect(wf, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addObject()));
}

void QFoo::addObject()
{
wf->addToJavaScriptWindowObject(QString("QFoo"), this);
}

void QFoo::print(const QString &msg)
{
qDebug() << "Output the message " << msg;
}

// 测试主函数
int main(int argc, char *argv[])
{
QApplication test(argc, argv);

QWebView *wv = new QWebView();

QFoo *foo = new QFoo(wv);
foo->initialize(wv);

wv->setUrl(QUrl("foo.html"));
wv->show();

return test.exec();
}


HTML测试代码很简单:

<script>

QFoo.print("Hello world!");

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: