2009-09-11 19 views
5

Estoy tratando de escribir un visor de registro simple utilizando el puerto/implementación WebKit de Qt4. Mi código HTML es el siguiente:Qt4: ¿Cómo llamar funciones de JavaScript en una página de C++ a través de QtWebkit?

http://pastie.org/613296

Más específicamente, estoy tratando de encontrar la manera de llamar a la función add_message() que se define en la sección <script> en el documento HTML de mi código C++.


// Doesn't work: 
QWebElement targetElement = chatView->page()->mainFrame()->findFirstElement("head").firstChild("script"); 

// Function is not included, either... 
qDebug() << targetElement.tagName() << targetElement.functions(); 

// The ultimate attempt in calling the function anyway: 
QVariant functionResult = targetElement.callFunction("add_message"); 

Respuesta

12

Si está utilizando Qt 4.5 hacerlo algo como esto:

htmlView->page()->mainFrame()->evaluateJavaScript("add_message(); null"); 

Nota: null al final de la escritura es para problema de rendimiento. QWebFrame::evaluateJavaScript devuelve QVariant con el último valor en el script. Evaluar el último valor en el script puede consumir mucho tiempo, por lo que poner null al final lo hace regresar inmediatamente.

+1

Gracias, lo intentaré de inmediato cuando llegue a casa. Aunque parece que tengo que escapar de los argumentos para utilizarlos como literales en la llamada a evaluateJavaScript(). ¿No es peligroso o algo así? – BastiBen

+0

Sí, debe escapar de los argumentos, ya que JavaScript generará errores. No debería ser dañino, ya que se escapa solo para el analizador de JavaScript, en lugar del webkit, aparecerá igual que el parámetro no guardado –

Cuestiones relacionadas