Qt4: Как вызывать функции JavaScript на странице из C++ через QtWebkit?

Я пытаюсь написать простую программу просмотра журналов, используя порт/реализацию Qt4 WebKit. Мой HTML-код выглядит так:

http://pastie.org/613296

В частности, я пытаюсь выяснить, как вызвать функцию add_message(), которая определена в разделе <script> в документе HTML из моего кода 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");

person Community    schedule 11.09.2009    source источник


Ответы (1)


Если вы используете Qt 4.5, сделайте это примерно так:

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

Примечание. null в конце скрипта указывает на проблемы с производительностью. QWebFrame::evaluateJavaScript возвращает QVariant с последним значением в скрипте. Оценка последнего значения в скрипте может занять очень много времени, поэтому добавление null в конце приводит к немедленному возврату.

person Kamil Klimek    schedule 03.12.2009
comment
Спасибо! Попробую сразу, как приду домой. Хотя это похоже на то, что мне нужно экранировать аргументы, чтобы использовать их как литералы в вызове AssessmentJavaScript(). Это не опасно или что? - person BastiBen; 04.12.2009
comment
Да, вам нужно избегать аргументов, потому что JavaScript будет генерировать ошибки. Это не должно быть опасно, потому что вы экранируете его только для парсера JavaScript, внутри webkit он будет выглядеть так же, как неэкранированный параметр - person Kamil Klimek; 11.12.2009