无法使用 QtWebkit 通过 javascript 访问 Qt 对象方法
Cannot access Qt object methods through javascript using QtWebkit
使用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() 的公共插槽(我知道这个名字很糟糕,但它是为了测试,我已经尝试使用不同的函数名称以防发生冲突)。
网络界面
#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"
}
}
webInterFacer JSInterface;您的 webInterfacer 对象是一个局部变量。一旦超出范围,它就会被销毁,即一旦你退出函数 initJavaScriptInterface();
修复
void MainWindow::initJavascriptInterface(){
webInterfacer* JSInterface = new webInterfacer();
QWebFrame *frame = ui->webView->page()->mainFrame();
frame->addToJavaScriptWindowObject("sender",JSInterface);
}
相关文章:
- Qt:从另一个窗口访问公共对象
- 如何访问QT中传递给程序的参数
- 从 QT Widget 对象实例访问 QT Widget 子成员
- 如何访问Qt::D isplayRole并在TableView中指定列
- 访问QT上的本地用户文件进行Web组件
- 使用C 访问QT / QML对象
- 在连接语句中访问Qt信号的"有效载荷"
- 访问QT小部件线程安全
- 无法从外部cpp文件访问Qt UI
- 如何访问Qt中父选项卡的属性
- QtWebkit javascript bridge,无法访问 Qt 对象方法
- 如何从任何类全局访问 QT 对话框
- 如何在c++项目中访问Qt的资源文件?
- 如何从非Qt函数访问Qt资源数据
- 从Webkit IFRAME(本地页面)访问Qt QWebView桥的技巧
- 使用QJSEngine从JavaScript访问Qt API
- 无法从 void 函数访问 Qt UI
- 访问Qt Designer创建的QWizardPage
- 如何访问Qt中另一个类的变量
- 无法使用 QtWebkit 通过 javascript 访问 Qt 对象方法