programmation Qt: Comment étendre API Javascript dans WebKit
-
27-09-2019 - |
Question
Je suis nouveau à Qt et ce que je suis en train de faire est:
- Créer une application Linux en utilisant le framework Qt.
- Cette application affiche des pages Web à partir de l'Internet.
- Je veux étendre l'API JavaScript pour accéder à certaines données et appareil à base de l'appareil, ce qui signifie que certains appareils peuvent être contrôlés à l'aide JavaScript Webkit.
Mais comment puis-je ajouter des fonctions personnalisées / classes WebKit dans Qt?
La solution
Heureusement, il existe une documentation sur ce point, enfin: http: // doc .qt.io / qt-4.8 / qtwebkit-bridge.html
Autres conseils
Je l'ai fait un projet QWebKit dans lequel j'affermis un pont entre le code Javascript et mon C ++.
Pour cela je la méthode:
this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
Cela vous permet d'exécuter des méthodes de l'objet que vous passez à addToJavaScriptWindowObject comme second paramètre de Javascript, en utilisant l'objet spécifié comme premier paramètre.
Voici un exemple:
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()";
}
}
Alors, de Javascript que je peux faire:
$('input:text').keydown( god.onChange );
Ainsi, chaque fois que j'appuyez sur une touche dans une zone de saisie, god.onChange () est exécutée qui exécute navigateur :: sous onChange ().
Vous évitez ainsi l'extension de la JS api.