Qt4: How to call JavaScript functions in a page from C++ via QtWebkit?

BastiBense picture BastiBense · Sep 11, 2009 · Viewed 7.6k times · Source

I'm trying to write a simple log viewer using Qt4's WebKit port/implementation. My HTML code looks like this:

http://pastie.org/613296

More specifically, I'm trying to find out how to call the add_message() function which is defined in the <script> section in the HTML document from my C++ code.


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

Answer

Kamil Klimek picture Kamil Klimek · Dec 3, 2009

If you are using Qt 4.5 do it something like this:

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

Note: null at the end of script is for performance issue. QWebFrame::evaluateJavaScript returns QVariant with last value in the script. Evaluating last value in the script may be really time consuming, so putting null at the end makes it return immediately.