无法使用 QtWebkit 通过 javascript 访问 Qt 对象方法

Cannot access Qt object methods through javascript using QtWebkit

本文关键字:访问 Qt 对象 方法 javascript 通过 QtWebkit      更新时间:2023-10-16

使用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);

}