IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Récupérer une variable globale Javascript dans un CHtmlView


Sujet :

MFC

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 58
    Points
    58
    Par défaut Récupérer une variable globale Javascript dans un CHtmlView
    Bonjour,

    Je dispose d'une classe héritant de CDialog et affichant une CHtmlView.
    J'arrive effectivement à visualiser une URL grâce à ce procédé. J'aimerai cependant récupérer une variable globale javascript, pour pouvoir ensuite appeler des méthodes de cette variable pour changer dynamiquement le contenue de la page HTML. J'ai trouvé quelques liens sur internet pour récupérer des variables javascript, mais ça n'a pas l'air de fonctionner, seulement je n'arrives pas bien à voir ce que je fais mal (ou que je ne fais pas). Voilà en gros ce que j'ai écris jusqu'à maintenant :

    Test.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Test : public CDialog
    {
    public :
    	Test(CWnd* pParent = NULL);
    	afx_msg BOOL OnInitDialog();
    	bool GetJScript();
    	virtual ~Test_Oleg();
     
    private :
     
    	CHtmlView* m_html;
    	CComPtr<IHTMLDocument2> m_spDoc;
    	CComPtr<IDispatch> scripts;
    	CSplitterWnd m_split;
     
    };
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    BOOL Test::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	CRect rect;
    	GetClientRect( &rect );
     
    	m_split.CreateStatic(this, 1, 1);
    	m_split.CreateView(0,0,RUNTIME_CLASS(CHtmlView), CSize(rect.right, rect.bottom), NULL);
     
    	m_html = (CHtmlView*)m_split.GetPane(0, 0);
            m_html->Navigate2("lien_html");
    	m_split.MoveWindow(0,0, rect.right, rect.bottom -40);
    	m_split.ShowWindow(SW_SHOW);
            LPDISPATCH pDisp = m_html->GetHtmlDocument();
     
    	if(pDisp)
    	{
     
    		HRESULT hresult = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&m_spDoc );
     
    		if(hresult != S_OK)
    		{
    			return FALSE;
    		}
    		if(!GetJScript())
    		{
    			return FALSE;
    		}
    		//Find dispid for given function in the object
    		 CComBSTR bstrMember("DS");
    		DISPID dispid = NULL;
    		 HRESULT hr = scripts->GetIDsOfNames(IID_NULL,&bstrMember,1,
    									 LOCALE_SYSTEM_DEFAULT,&dispid);
    		if(FAILED(hr))
    		{
    		    MessageBox("Can't find DS variable", "", MB_ICONWARNING);
    		    return false;
    		 }
    	}
    }
    la variable DS est représentée comme ceci dans le html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script name="DS" id="DS">
            var DS = new DataSet();
        </script>
    Si quelqu'un a une idée, ou sait où est-ce que je m'y prends mal!
    Merci d'avance,
    Guillaume

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 58
    Points
    58
    Par défaut
    Re-Bonjour,
    Bon j'ai résolu ce problème ci en bougeant ce code d'InitDialog à plus loin dans le code, (il doit falloir que la page soit finit de charger correctement dans le CHtmlView j'imagine).
    J'arrive donc maintenant à récupérer des variables Javascript et leur contenue, seulement la variable qui m'intéresse est un objet Javascript et j'aimerai invoquer ses méthodes, pas seulement récupérer une valeur, et je n'arrive pas à trouver comment réaliser ceci !
    Si quelqu'un à une idée je suis preneur.
    Merci d'avance.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 58
    Points
    58
    Par défaut
    Bon j'ai finalement réussi à appeler mes méthodes de mon objet Javascript.
    (Après avoir récupéré un IDispatch de ma variable, il suffit de refaire un GetIDsOfNames avec le nom de la méthode sur cet objet, puis un Invoke).
    Cependant maintenant mes méthodes Javascript me lance des exceptions (qui sont bien lancé puisque mon CHtmlView ouvre une fenêtre pour me dire qu'il y a eu une exception non catché dans un script), cependant je n'arrive pas à la récupérer du côté C++.

    mon appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hr = scripts->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
    contient pourtant bien un pointeur vers une structure EXCEPINFO censé être rempli en cas d'exceptions durant l'appel d'Invoke (hr ne vaut aussi pas DISP_E_EXCEPTION).
    Quelqu'un aurait une idée du pourquoi du comment ?
    Merci d'avance.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/07/2014, 23h31
  2. Récupérer une variable de Javascript vers requete Sql dans JSTL
    Par najeh22 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/05/2013, 23h29
  3. Réponses: 2
    Dernier message: 17/11/2008, 15h15
  4. Récupérer une variable de session dans une Servlet
    Par Lazarey dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/03/2008, 11h46
  5. Récupérer une variable globale
    Par sourivore dans le forum Flash
    Réponses: 4
    Dernier message: 03/12/2006, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo