2009-09-11 8 views
5

Sto provando a scrivere un semplice visualizzatore di log utilizzando la porta/implementazione WebKit di Qt4. Il mio codice HTML simile a questo:Qt4: come chiamare le funzioni JavaScript in una pagina da C++ tramite QtWebkit?

http://pastie.org/613296

In particolare, sto cercando di trovare il modo di chiamare la funzione add_message() che è definito nella sezione <script> nel documento HTML dal mio codice 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"); 

risposta

12

Se si utilizza Qt 4.5 farlo qualcosa di simile:

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

Nota: null alla fine della sceneggiatura è per problema di prestazioni. QWebFrame::evaluateJavaScript restituisce QVariant con l'ultimo valore nello script. La valutazione dell'ultimo valore nello script può richiedere molto tempo, pertanto inserire null al termine rende immediatamente il suo ritorno.

+1

Grazie, proverò subito quando torno a casa. Anche se sembra che debba sfuggire agli argomenti per usarli come valori letterali nella chiamata evaluateJavaScript(). Non è pericoloso o qualcosa del genere? – BastiBen

+0

Sì, devi uscire dagli argomenti, perché JavaScript genererà errori. Non dovrebbe essere dangerouse, perché lo si sfugge solo per parser JavaScript, iniside di webkit apparirà come il parametro senza escape –

Problemi correlati