Accès aux membres non exposés sur le modèle objet de document HTML géré
Le dom (Document Object Model) HTML managé contient une classe appelée HtmlElement qui expose les propriétés, méthodes et événements que tous les éléments HTML ont en commun. Toutefois, vous devrez parfois accéder aux membres que l’interface managée n’expose pas directement. Cette rubrique examine deux façons d’accéder aux membres non exposés, notamment les fonctions JScript et VBScript définies à l’intérieur d’une page Web.
Accès à des membres non exposés via des interfaces managées
HtmlDocument et HtmlElement fournissent quatre méthodes permettant d’accéder aux membres non exposés. Le tableau suivant présente les types et leurs méthodes correspondantes.
Type de membre | Méthode(s) |
---|---|
Propriétés (HtmlElement) | GetAttribute SetAttribute |
Méthode | InvokeMember |
Événements (HtmlDocument) | AttachEventHandler DetachEventHandler |
Événements (HtmlElement) | AttachEventHandler DetachEventHandler |
Événements (HtmlWindow) | AttachEventHandler DetachEventHandler |
Lorsque vous utilisez ces méthodes, il est supposé que vous disposez d’un élément du type sous-jacent correct. Supposons que vous souhaitez écouter l’événement Submit
d’un élément FORM
sur une page HTML, afin de pouvoir effectuer un prétraitement sur les valeurs du FORM
avant que l’utilisateur ne les envoie au serveur. Dans l’idéal, si vous contrôlez le code HTML, vous définissez la FORM
pour avoir un attribut ID
unique.
<HTML>
<HEAD>
<TITLE>Form Page</TITLE>
</HEAD>
<BODY>
<FORM ID="form1">
... form fields defined here ...
</FORM>
</BODY>
</HTML>
Après avoir chargé cette page dans le contrôle WebBrowser, vous pouvez utiliser la méthode GetElementById pour récupérer le FORM
au moment de l’exécution à l’aide de form1
comme argument.
private void SubmitForm(String formName)
{
HtmlElementCollection elems = null;
HtmlElement elem = null;
if (webBrowser1.Document != null)
{
HtmlDocument doc = webBrowser1.Document;
elems = doc.All.GetElementsByName(formName);
if (elems != null && elems.Count > 0)
{
elem = elems[0];
if (elem.TagName.Equals("FORM"))
{
elem.InvokeMember("Submit");
}
}
}
}
Private Sub SubmitForm(ByVal FormName As String)
Dim Elems As HtmlElementCollection
Dim Elem As HtmlElement
If (WebBrowser1.Document IsNot Nothing) Then
With WebBrowser1.Document
Elems = .All.GetElementsByName(FormName)
If (Not Elems Is Nothing And Elems.Count > 0) Then
Elem = Elems(0)
If (Elem.TagName.Equals("FORM")) Then
Elem.InvokeMember("Submit")
End If
End If
End With
End If
End Sub
Accès aux interfaces non managées
Vous pouvez également accéder aux membres non exposés sur le DOM HTML managé à l’aide des interfaces COM (Component Object Model) non managées exposées par chaque classe DOM. Cela est recommandé si vous devez effectuer plusieurs appels contre des membres non exposés, ou si les membres non exposés retournent d’autres interfaces non managées non encapsulées par le DOM HTML managé.
Le tableau suivant présente toutes les interfaces non managées exposées via le DOM HTML managé. Cliquez sur chaque lien pour obtenir une explication de son utilisation et par exemple du code.
Type | Interface non managée |
---|---|
HtmlDocument | DomDocument |
HtmlElement | DomElement |
HtmlWindow | DomWindow |
HtmlHistory | DomHistory |
Le moyen le plus simple d’utiliser les interfaces COM consiste à ajouter une référence à la bibliothèque DOM HTML non managée (MSHTML.dll) de votre application, bien qu’elle ne soit pas prise en charge.
Accès aux fonctions de script
Une page HTML peut définir une ou plusieurs fonctions à l’aide d’un langage de script tel que JScript ou VBScript. Ces fonctions sont placées à l’intérieur d’une page de SCRIPT
dans la page et peuvent être exécutées à la demande ou en réponse à un événement sur le DOM.
Vous pouvez appeler toutes les fonctions de script que vous définissez dans une page HTML à l’aide de la méthode InvokeScript. Si la méthode de script retourne un élément HTML, vous pouvez utiliser un cast pour convertir ce résultat de retour en HtmlElement. Pour plus d’informations et pour obtenir des exemples de code, consultez InvokeScript.
Voir aussi
.NET Desktop feedback