分享

QT?Webkit?添加JS对象

 mediatv 2014-07-27
正文 字体大小:

QT Webkit 添加JS对象

(2011-11-07 11:11:19)
标签:

webkit

添加对象

it


由于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::setWebView(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>

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多