Невозможно получить доступ к методам объекта Qt через javascript, используя QtWebkit - PullRequest
2 голосов
/ 12 мая 2011

Используя javascript bridge QtWebkit, я создал класс для взаимодействия данных в моем веб-фрейме с остальной частью моего кода 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"
    }
}

1 Ответ

2 голосов
/ 12 мая 2011

webInterFacer JSInterface;Ваш объект webInterfacer является локальной переменной. Он уничтожается, как только выходит из области видимости, то есть после выхода из функции initJavaScriptInterface ();

Fix

void MainWindow::initJavascriptInterface(){

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

}

...