Programação QT: Como estender a API JavaScript no Webkit
-
27-09-2019 - |
Pergunta
Eu sou novo no QT e o que estou tentando fazer é:
- Crie um aplicativo Linux usando a estrutura QT.
- Este aplicativo exibe algumas páginas da Web da Internet.
- Quero estender a API JavaScript para acessar alguns dados baseados em dispositivo e dispositivo, o que significa que alguns dispositivos podem ser controlados usando o JavaScript no WebKit.
Mas como adiciono algumas funções/classes personalizadas ao WebKit no QT?
Solução
Felizmente, existe alguma documentação sobre isso, finalmente: http://doc.qt.io/qt-4.8/qtwebkit-bridge.html
Outras dicas
Eu fiz um projeto QWebkit no qual estabilizei uma ponte entre JavaScript e meu código C ++.
Para conseguir isso, usei o método:
this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );
Isso permite que você execute métodos do objeto que você passa para addTojavScriptWindowObject como segundo parâmetro do JavaScript, usando o objeto especificado como primeiro parâmetro.
Aqui um exemplo:
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()";
}
}
Então, do JavaScript, posso fazer:
$('input:text').keydown( god.onChange );
Então, toda vez que pressiono uma tecla em uma caixa de entrada, God.onchange () é executado que executa o navegador :: onchange () slot.
Dessa forma, você evita estender a API JS.