2009-09-11 5 views
5

J'essaie d'écrire un simple visualiseur de journal en utilisant le port/implémentation WebKit de Qt4. Mon code HTML ressemble à ceci:Qt4: Comment appeler les fonctions JavaScript dans une page à partir de C++ via QtWebkit?

http://pastie.org/613296

Plus précisément, je suis en train de savoir comment appeler la fonction add_message() qui est défini dans la section <script> dans le document HTML à partir de mon code 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"); 

Répondre

12

Si vous utilisez Qt 4.5 faire quelque chose comme ceci:

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

Note: null à la fin du script est pour problème de performance. QWebFrame::evaluateJavaScript renvoie QVariant avec la dernière valeur dans le script. L'évaluation de la dernière valeur dans le script peut prendre beaucoup de temps, mettre null à la fin le fait revenir immédiatement.

+1

Merci, je vais essayer tout de suite quand je rentre à la maison. Bien que cela ressemble à devoir échapper les arguments pour les utiliser comme des littéraux dans l'appel evaluateJavaScript(). N'est-ce pas dangereux ou quelque chose? – BastiBen

+0

Oui, vous devez échapper des arguments, parce que JavaScript va générer des erreurs. Il ne devrait pas être dangereux, car il vous échapper seulement pour l'analyseur JavaScript, à l'intérieur de webkit il apparaîtra même comme paramètre non échappé –

Questions connexes