QT实现预编译的浏览器插件 JS与QT对象进行交互
2013-11-05 14:43
603 查看
JS与QT对象进行交互,顾名思义,就是将QT对象和JS对象相关联,然后JS可以调用QT对象的方法并返回值,反之QT可以调用JS的方法(回调)。
1,把QT对象加入到JS中,并实现JS调用QT对象。
测试主函数
HTML测试代码:
/*****************************************************************/
2,通过将本地QT的信号和JS的槽连接起来的方式,实现QT对象调用JS(回调)
HTML测试代码
3,实现JS对象调用QT 返回的为JS对象而不是JSON串
HTML测试代码
/*****************************************************************/
4,另一种方式实现QT对象调用JS对象(回调)
HTML测试代码
参考文档:
http://www.cnblogs.com/ziqiuqiandao/archive/2012/12/29/2838652.html http://blog.csdn.net/myaccella/article/details/6956534 http://software.intel.com/zh-cn/blogs/2010/06/09/qt-webkitqobjectjavascript/
1,把QT对象加入到JS中,并实现JS调用QT对象。
// 实现一个新类 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>
/*****************************************************************/
2,通过将本地QT的信号和JS的槽连接起来的方式,实现QT对象调用JS(回调)
//定义QT对象 class WebApp : public QObject { Q_OBJECT public: WebApp(QObject *parent){} void initialize(QWebView *wv); signals: //定义QT信号 void launchSignal(QString obj); void getAppListSignal(QString obj); public slots: void launch(const QString &appName); void getAppList(); private slots: void addObject(); private: QWebFrame *wf; }; //QT对象如何发射信号 void WebApp::launch(const QString &appName) { QString url = ""; if(appName == "EManual"){ url = "{\"ip\":\"192.168.42.129\",\"port\":\"12100\"}"; }else if(appName == "DBA"){ url = "{\"ip\":\"192.168.42.129\",\"port\":\"12102\"}"; } /* send signal */ emit launchSignal(url); }
HTML测试代码
<script> webapp.launchSignal.connect(launchCallBack); webapp.launch("EManual"); function launchCallBack(object) { var msg = JSON.parse(object); var url = "http://" + msg.ip + "/" + msg.port; window.location.href = url; } </script>
3,实现JS对象调用QT 返回的为JS对象而不是JSON串
//定义QT对象 class WebApp : public QObject { Q_OBJECT public: WebApp(QObject *parent){} void initialize(QWebView *wv); public slots: //定义槽函数,其可以返回和接受JS对象 QMap<QString, QVariant> slotThatReturns(const QMap<QString,QVariant>& object); private slots: void addObject(); private: QWebFrame *wf; //返回的JS对象 QMap<QString, QVariant> m_returnObject; }; //返回对象 QMap<QString, QVariant> WebApp::slotThatReturns(const QMap<QString,QVariant>& object) { qDebug() << "SampleQObject::slotThatReturns"; this->m_returnObject.clear(); this->m_returnObject.unite(object); QString addedBonus = QString::number(object["intValue"].toInt(), 10).append(" added bonus."); this->m_returnObject["stringValue"] = QVariant(addedBonus); qDebug() << "SampleQObject::slotThatReturns" << this->m_returnObject; return this->m_returnObject; // 返回m_returnObject包含有字符串 1 added bonus }
HTML测试代码
<script> var object = {intValue: 1}; var returnedObject = webapp.slotThatReturns(object); alert(returnedObject.stringValue); </script>
/*****************************************************************/
4,另一种方式实现QT对象调用JS对象(回调)
//定义QT对象 class WebApp : public QObject { Q_OBJECT public: WebApp(QObject *parent){} void initialize(QWebView *wv); public slots: //定义槽函数,其可以返回和接受JS对象 void getAsynCallBack(const QString &type,const QString &success,const QString $error); private slots: void addObject(); private: QWebFrame *wf; }; //函数实现 void Vehicle::getAsynCallBack(const QString &type,const QString &success,const QString $error) { QString msg = ""; //此处省略n行 if(error) { qDebug() << "error! " << msg; msg = "{\"status\":\"error\",\"errorid\":\"-1\"}"; wf->evaluateJavaScript("error('" + msg + "')"); } else { qDebug() << "error! " << msg; msg = "{\"status\":\"ok\"}"; wf->evaluateJavaScript("success('" + msg + "')"); } }
HTML测试代码
<script> vehicle.getAsynCallBack("vehicle_info_fuel_type",success,error); function success(data){ alert(data); } function error(data){ alert(data); } </script>
参考文档:
http://www.cnblogs.com/ziqiuqiandao/archive/2012/12/29/2838652.html http://blog.csdn.net/myaccella/article/details/6956534 http://software.intel.com/zh-cn/blogs/2010/06/09/qt-webkitqobjectjavascript/
相关文章推荐
- 关于按enter进行登录的js实现(判断是否是IE或者是其他浏览器)
- 原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
- clipboard.js 实现 点击按钮复制粘贴兼容ios 安卓 pc浏览器 zclip复制插件需要Flash支持
- Qt Webkit中浏览器插件设计实现
- Qt5.6 c++与网页html/js的交互实现
- Android当中跟js进行交互,实现方法的互调
- Firebreath生成的Windows插件窗口对象与JS交互对象
- Three.js实现浏览器变动时进行自适应的方法
- js跨浏览器实现将字符串转化为xml对象的方法
- js跨浏览器实现将字符串转化为xml对象的方法
- QWebChannel实现QT与网页JS交互
- QT实现浏览器插件 调用及回调 (三)
- c#winform中使用WebKit传递js对象实现与网页交互
- JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
- js实现的对象数组根据对象的键值进行排序代码
- JS与Qt对象交互
- QT实现浏览器插件 调用及回调 (一)
- Firebreath生成的Windows插件窗口对象与JS交互对象
- C#在WinForm中使用WebKit传递js对象实现与网页交互的方法
- js实现图片在浏览器进行预览