France Hardware : Forums de discussion - Découvrez notre nouveau comparateur d'offres Internet
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
29 582 membres enregistrés - 2 069 993 posts - 122 247 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Problème d'appel JavaScript à partir de C++
96 connectés(record : 2799 le 29 May 2016 - 15 h 34)

Vous devez vous connecter pour répondre au topic.
Problème d'appel JavaScript à partir de C++

alitokmen
Think ®

Messages : 3 686
Inscrit le 19/09/02
Ville : Grenoble, France || Ankara, Turquie
Non connecté
  Posté le 26 May 2006 - 13 h 04 m 41 s
Bonjour tout le monde

Je suis en train de travailler sur une interface qui fonctionne à base de DHTML (donc la classe CHtmlView) qui doit se refraichir (par JavaScript) quand arrivent des messages réseau. Sur de divers sites, j'ai trouvé des exemples mais à chaque fois le JavaScript est appelé quand l'utilisateur clique sur un boutton. Problème: l'appel via un autre thread ne marche pas! Je m'expliques:

J'ai généré un projet avec vue HTML en utilisant les options de Visual C++ 6 (projet MFC classique). Dedans, j'ai marqué toutes mes modifications avec le commentaire "JavaScript problem sample" et en effet ces derniers sont dans les fichiers JavaScriptView.h et JavaScriptView.cpp .

Dans JavaScriptView.h, je fais out simplement un override de la méthode OnDocumentComplete.

Dans JavaScriptView.cpp, j'ajoutes deux headers (atlbase.h and mshtml.h) ainsi que la fonction suivante:

    Code     
 1.     // Added for the JavaScript problem sample
 2.     DWORD WINAPI CallJScriptLater( LPVOID lpParam )
 3.     {
 4.         CComQIPtr<IHTMLDocument2> pHtmlDoc( ((CJavaScriptView*) lpParam)->GetHtmlDocument() );
 5. 
 6.         CComPtr<IHTMLWindow2> pWnd;
 7.         pHtmlDoc->get_parentWindow( &pWnd );
 8. 
 9.         CComBSTR bstrMember(CString("alert('boo')"));
10. 
11.         // then simply execute it
12.         CComBSTR vtlanguage(CString("javascript"));
13.         VARIANT vresult;
14. 
15.         pWnd->execScript(bstrMember,vtlanguage,&vresult);
16. 
17.         return 0;
18.     }
Et, la fonction qui va l'appeler quand c'est bon:
    Code     
 1.     // Added for the JavaScript problem sample
 2.     void CJavaScriptView::OnDocumentComplete( LPCTSTR lpzsURL )
 3.     {
 4.         CHtmlView::OnDocumentComplete( lpzsURL );
 5. 
 6.     #if 1
 7.         CallJScriptLater( this );
 8.     #else
 9.         CreateThread( NULL, 0, CallJScriptLater, this, 0, NULL);
10.     #endif
11. 
12.     }
Finalement, j'ai changé OnInitialUpdate pour qu'elle charge about:blank (la page la plus simple imaginable):
    Code     
1.     void CJavaScriptView::OnInitialUpdate()
2.     {
3.         CHtmlView::OnInitialUpdate();
4. 
5.         // Changed for the JavaScript problem sample
6.         Navigate2(_T("about:blank"),NULL,NULL);
7.     }


Donc, le programme::

- Une fois initialisé, charge la page about:blank
- Une fois le chargement complet, execute le JavaScript: alert('boo')

La JavaScript peut être appelé de deux manières:

- Directement (si OnDocumentComplete a la partie #if 1)
- Via un thread (si OnDocumentComplete a la partie #if 0)

PROBLEME: L'appel direct (JavaScript_directCall.exe) fonctionne alors que l'appel via thread (JavaScript_threadCall.exe) foire!

Si quelqu'un aurait une idée de solution merci de me le faire savoir, vous trouverez les sources sur http://temp.alishomepage.com/.RMI/JavaScript.zip

Vous remerciant

S. Ali Tokmen
http://ali.tokmen.com



S. Ali Tokmen
http://ali.tokmen.com
http://contact.ali.tokmen.com


alitokmen
Think ®

Messages : 3 686
Inscrit le 19/09/02
Ville : Grenoble, France || Ankara, Turquie
Non connecté
  Posté le 03 June 2006 - 14 h 32 m 21 s



S. Ali Tokmen
http://ali.tokmen.com
http://contact.ali.tokmen.com


Page genérée en 0.1493 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL | Actualité ADSL | Deligo | Appareil photo | Commande Au Volant
Creative Commons
Message Boards and Forums Directory