2009-09-11 9 views
5

Próbuję napisać prostą przeglądarkę dziennika przy użyciu portu/implementacji Qt4 WebKit. Moje HTML kod wygląda następująco:Qt4: Jak wywołać funkcje JavaScript na stronie z C++ za pomocą QtWebkit?

http://pastie.org/613296

Dokładniej, próbuję dowiedzieć się, jak wywołać funkcję add_message(), która jest zdefiniowana w sekcji <script> w dokumencie HTML z mojego kodu 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"); 

Odpowiedz

12

Jeśli używasz Qt 4.5 zrobić coś takiego:

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

Uwaga: null na końcu skryptu jest dla kwestii wydajności. QWebFrame::evaluateJavaScript zwraca QVariant z ostatnią wartością w skrypcie. Ocena ostatniej wartości w skrypcie może być naprawdę czasochłonna, więc umieszczenie null na końcu powoduje, że natychmiast powraca.

+1

Dzięki, spróbuję od razu, kiedy wrócę do domu. Chociaż wygląda na to, że muszę uciec od argumentów, aby użyć ich jako literałów w wywołaniu evaluateJavaScript(). Czy to nie jest niebezpieczne? – BastiBen

+0

Tak, musisz uciec od argumentów, ponieważ JavaScript wygeneruje błędy. Nie powinno to być niebezpieczne, ponieważ uciekniesz tylko dla parsera JavaScript, na stronie webkita pojawi się to samo, co parametr bez zmiany znaczenia –

Powiązane problemy