开发者

Cannot access Qt object methods through javascript using QtWebkit

Using QtWebkit's javascript bridge, I have created a class to interface the data in my web frame with the rest of my Qt code. it recognises the object, but none of its methods.

//executed with main window constructor
void MainWindow::initJavascriptInterface(){

    webInterfacer JSInterface;
    QWebFrame *frame = ui->webView->page()->mainFrame();
    frame->addToJavaScriptWindowObject("sender",&JSInterface);

}

The class has only one public slot called getInfo() (I know the name sucks but it's for testing, i have tried with different function names in case it was a collision).

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

I tried with different content in getInfo, even an empty function, it is never recognized.

In my HTML header (jQuery):

$(document).ready(function(){
    if(window.sender){
        alert("obj: " + typeof sender); //shows "obj: object"
        alert("getInfo: " + typeof sender.getInfo); //shows "getInfo: undef开发者_StackOverflow中文版ined"
    }
}


webInterFacer JSInterface; Your webInterfacer object is a local variable.It is destroyed as soon as it is out of scope ie, once you exit the function initJavaScriptInterface();

Fix

void MainWindow::initJavascriptInterface(){

webInterfacer* JSInterface = new webInterfacer();
QWebFrame *frame = ui->webView->page()->mainFrame();
frame->addToJavaScriptWindowObject("sender",JSInterface);

}

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜