2009-09-11 6 views
5

Ich versuche, einen einfachen Log-Viewer mit Qt4 WebKit Port/Implementierung zu schreiben. Mein HTML-Code sieht wie folgt aus:Qt4: So rufen Sie JavaScript-Funktionen in einer Seite von C++ über QtWebkit auf?

http://pastie.org/613296

Genauer gesagt, ich versuche, herauszufinden, wie man die ADD_MESSAGE() Funktion aufrufen, die in der <script> Abschnitt im HTML-Dokument von meinem C++ Code definiert ist.


// 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"); 

Antwort

12

Wenn Sie Qt verwenden es 4,5 etwas tun, wie folgt aus:

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

Hinweis: null am Ende des Skripts ist für Performance-Problem. QWebFrame::evaluateJavaScript gibt QVariant mit dem letzten Wert im Skript zurück. Das Auswerten des letzten Wertes im Skript kann sehr zeitaufwendig sein, so dass null am Ende zurückgegeben wird und sofort zurückkehrt.

+1

Danke, ich werde es sofort versuchen, wenn ich nach Hause komme. Obwohl das so aussieht, muss ich den Argumenten entkommen, um sie als Literale im Aufruf von evaluateJavaScript() zu verwenden. Ist das nicht gefährlich oder so? – BastiBen

+0

Ja, Sie müssen Argumente umgehen, weil JavaScript Fehler erzeugt. Es sollte nicht gefährlich sein, weil Sie es nur für JavaScript-Parser entkommen, iniside von Webkit wird es als unescaped Parameter erscheinen –