使用QtWebkit的javascript桥接器,我创建了一个类来将我的Web框架中的数据与我的其他Qt代码进行交互。它识别对象,但没有识别它的方法。
//executed with main window constructor
void MainWindow::initJavascriptInterface(){
webInterfacer JSInterface;
QWebFrame *frame = ui->webView->page()->mainFrame();
frame->addToJavaScriptWindowObject("sender",&JSInterface);
}
该类只有一个名为getInfo()的公共插槽(我知道这个名字很糟糕,但是它用于测试,我尝试使用不同的函数名称,以防碰撞)。
webinterfacer.h
#ifndef WEBINTERFACER_H
#define WEBINTERFACER_H
#include <QObject>
class webInterfacer : public QObject
{
Q_OBJECT
public:
explicit webInterfacer();
~webInterfacer();
public slots:
void getInfo();
signals:
//signal to emit when getInfo is called
void openPopup(QString,QString);
};
#endif // WEBINTERFACER_H
我尝试使用getInfo中的不同内容,即使是空函数,它也永远不会被识别。
在我的HTML标头(jQuery)中:
$(document).ready(function(){
if(window.sender){
alert("obj: " + typeof sender); //shows "obj: object"
alert("getInfo: " + typeof sender.getInfo); //shows "getInfo: undefined"
}
}
答案 0 :(得分:2)
webInterFacer JSInterface; 你的webInterfacer对象是一个局部变量。它一旦超出范围即被销毁,即退出函数initJavaScriptInterface();
修复
void MainWindow::initJavascriptInterface(){
webInterfacer* JSInterface = new webInterfacer();
QWebFrame *frame = ui->webView->page()->mainFrame();
frame->addToJavaScriptWindowObject("sender",JSInterface);
}