2016-12-12 1 views
1

Comment obtenir tout document.body.innerText sur QWebView? J'utilise QT version 5.5.1.Comment obtenir DOM innerText sur QWebView?

Par exemple,

fichier html pour charger

<script> 
    document.write("hello world!"); 
</script> 

et je veux obtenir "Bonjour tout le monde".

, j'ai essayé comme ça sur QT

QWebView *wv = new QWebView(this); 
QWebFrame *frame = wv->page()->mainFrame(); 
frame->load(QUrl("file:// ~ file path ~")); 
QString string = frame->toPlainText(); 
// then write string to file for checking 

J'attendais la chaîne est « Bonjour tout le monde », mais, il n'y avait rien. J'ai cherché et trouvé link, et j'ai changé le code comme ça, mais il n'y avait toujours rien.

Est-ce que je me méprends sur PlainText() peut-être? Et comment je peux obtenir DOM innerText sur QT 5.5?

Répondre

0

Vous ne partez pas assez longtemps pour que la page puisse être mise à jour. Il faudra un moment pour que le HTML se charge, encore moins pour que le Javascript soit exécuté.

Il y a deux solutions de contournement ici:

  1. Utilisez un QTimer attendre quelques secondes avant d'appeler toPlainText(). C'est un problème car il n'y a aucun moyen de savoir exactement combien de temps il faut attendre, mais ce serait suffisant à des fins de démonstration.
  2. Mettez à jour le code Javascript pour renvoyer une notification à votre code C++ après l'appel de document.write(). Par exemple, vous pouvez le faire via un WebSocket ou utiliser Qt WebChannel.
+0

Merci pour votre réponse, mais elle échoue à l'étape 1. J'essaie d'insérer sleep (2) - sur unistd.h - avant toPlainText, mais il n'y a pas de changement. (Si la fonction de veille ne convient pas à cette situation, dites-moi plz. Je vais essayer à nouveau avec QTimer.) – pr0gr4m

+0

oh, ça marche quand j'essaye par loadFinished. J'apprécie vraiment pour toi. Je vous remercie. – pr0gr4m