6

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");
Blender
  • 289,723
  • 53
  • 439
  • 496

1 Answers1

14

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.

Kamil Klimek
  • 12,884
  • 2
  • 43
  • 58
  • 1
    Thanks, I'll try it right away when I get home. Although that looks like I have to escape the arguments to use them as literals in the evaluateJavaScript() call. Isn't that dangerous or something? – BastiBen Dec 04 '09 at 11:13
  • Yes, you have to escape arguments, becouse JavaScript will generate errors. It shouldn't be dangerouse, becouse you escape it only for JavaScript parser, iniside of webkit it will appear same as unescaped parameter – Kamil Klimek Dec 11 '09 at 19:10