la programación Qt: Cómo extender API de JavaScript en WebKit
-
27-09-2019 - |
Pregunta
Soy nuevo en Qt y lo que estoy tratando de hacer es:
- Crear una aplicación de Linux utilizando el marco de Qt.
- Esta aplicación muestra algunas páginas web de Internet.
- quiero extender la API JavaScript para acceder a algunos de dispositivo y datos basados ??en dispositivos, lo que significa que algunos dispositivos pueden ser controlados usando JavaScript en Webkit.
Pero, ¿cómo puedo añadir algunas funciones / clases personalizadas a Webkit en Qt?
Solución
Afortunadamente, existe alguna documentación sobre este tema, por último: http: // doc .qt.io / qt-4,8 / QtWebKit-bridge.html
Otros consejos
He hecho un proyecto en el que QWebKit stablished un puente entre Javascript y mi código C ++.
Para lograr esto he utilizado el método:
this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
Esto le permite ejecutar los métodos del objeto se pasa a addToJavaScriptWindowObject como segundo parámetro de Javascript, utilizando el objeto especificado como primer parámetro.
Aquí un ejemplo:
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()";
}
}
A continuación, a partir de Javascript que puedo hacer:
$('input:text').keydown( god.onChange );
Así que cada vez que pulse una tecla en un cuadro de entrada, god.onChange () se ejecuta el cual ejecuta Browser :: onchange () ranura.
esta manera se evita que se extiende la API de JS.