none
Détection d'un changement de valeur de la propriété innerHtml de l'objet document de l'objet WebBrowser RRS feed

  • Discussion générale

  • Bonjour,

    Je suis à la recherche d'un moyen pour détecter tout changement dans la chaine InnerHtml du sous objet Document de l'objet WebBrowser.

    Mon principe est le suivant :

    Une fois la page Web affichée dans le container WebBrowser, celle ci vi sa vie.

    Le code javascript de cette page suite à une action utilisateur peut venir modifier un élément particulier dans le document de la page (ex : le innertext d'une div)

    Suite à cela, coté DotNet la propriété InnerHtml de l'objet Document est modifiée. Mon problème c'est :

    "COMMENT LE SAVOIR."

    mardi 16 juin 2015 05:49

Toutes les réponses

  • C'est en C#mais facilement adaptable :

    http://stackoverflow.com/questions/9110388/web-browser-control-how-to-capture-document-events


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 16 juin 2015 08:55
  • Merci de votre réponse.

    Cependant ce n'est pas tout a fait l'optique de solution vers laquelle je me suis orienté.

    Je cherche à réaliser un système "ouvert"

    Ainsi voici les prérequis fondamentaux :

    1/ "N'importe" quelle page Web de notre applicatif Web est susceptible d'être affichée en ce mode "hébergé" au moyen du container "WebBrowser"

    2/ Du fait du point 1/ et/ou que pour une même page Web celle ci peut être affichée en différents mode de type "applicatif" (mode saisie ou consultation), on arrive à un fonctionnement où des actions utilisateurs seront présentes parfois et seront absentes d'autres fois.
    Cela devient vite épineux si pour chaque écrans il faut identifier toutes les actions utilisateurs combinées en plus en fonction du mode "applicatif" de lancement de la page.

    3/ Une action utilisateur au sein de la page Web peut conduire à l'exécution d'une requête Ajax vers un Web Service qui retournera la valeur peut être attendue par le code dotnet hébergeant la page (c'est le cas par exemple d'une page WEB de login qui une fois que l'utilisateur a saisi correctement ses identifiants demande à un web service de fournir un "jeton" de session, jeton dont la valeur calculée par ce WS doit être connue dans le projet DotNet qui a hébergée la dite page de login)

    Aussi voici la solution que j'ai retenue :

    La page Web affichée, vie sa vie au grés des actions utilisateur. Ici seul le code JS de la page opère.
    Toutes les pages WEB disposent de la même "DIV" (toujours le même ID : communicationarea) invisible faisant office de zone tampon de communication inter système / plateforme.
    A charge au code JavaScript de la page de "fixer" la propriété innerHtml de cette div lorsqu'une action utilisateur "reconnue" car elle doit fournir au DotNet une valeur que celui-ci attend

    Le dotnet qui a affiché la page est pendant ce temps "en sommeil" il ne sera réveillé que lorsque la propriété innerText de l'objet HtmlElement correspondant à cette div tampon aura été détectée comme ayant changée.

    D'où ma question initiale "d'évènement" "change" sur la propriété innerText qui malheureusement n'existe pas.

    Je m'étais alors a une époque orienté vers une technologie de thread. Le thread s'occupe de détecter le changement de valeur de cette propriété innerText. Le souci c'est que dans le thread je n'ai pas accès aux propriétés de l'objet webbrowser de ma page WinForm même si le thread est créé au sein de cette WinForm.

    Conclusion : Dommage que Microsoft ce soit arrêté en si bon chemin lorsqu'il a conçu ce composant qu'est le WebBrowser.  

    mardi 16 juin 2015 15:17