programmazione Qt: Come estendere JavaScript API in WebKit
-
27-09-2019 - |
Domanda
Sono nuovo di Qt e quello che sto cercando di fare è:
- Crea un'applicazione Linux utilizzando il framework Qt.
- Questa applicazione visualizza alcune pagine web da Internet.
- voglio estendere l'API JavaScript per accedere ad alcune dispositivo e dati del dispositivo basato, il che significa che alcuni dispositivi possono essere controllate utilizzando JavaScript Webkit.
Ma come faccio ad aggiungere alcune personalizzate funzioni / classi di Webkit in Qt?
Soluzione
Per fortuna, esiste una certa documentazione su questo, infine: http: // doc .qt.io / QT-4.8 / QtWebKit-bridge.html
Altri suggerimenti
Ho fatto un progetto in cui ho QWebKit stablished un ponte tra Javascript e il mio codice C ++.
Per ottenere questo ho usato il metodo:
this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
Questo consente di eseguire metodi dell'oggetto che si passa a addToJavaScriptWindowObject come secondo parametro da JavaScript, utilizzando l'oggetto specificato come primo parametro.
Ecco un esempio:
class Browser : public QWebView
{
Q_OBJECT
public:
Browser( QWidget* parent=0 )
{
connect( this->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(onJavaScriptWindowObjectCleared()) );
}
public slots:
void onJavaScriptWindowObjectCleared()
{
// QString script = "console.log('init!');";
// this->page()->mainFrame()->evaluateJavaScript( script );
}
void onChange()
{
qDebug() << "Browser::onChange()";
}
}
Poi, da JavaScript che posso fare:
$('input:text').keydown( god.onChange );
Quindi, ogni volta che si preme un tasto in una casella di input, god.onChange () viene eseguito che esegue Browser :: onChange () slot.
In questo modo si evita di estendere l'API JS.