Accesso a membri non esposti nel modello a oggetti documento HTML gestito
Il DOM (Document Object Model) HTML gestito contiene una classe denominata HtmlElement che espone le proprietà, i metodi e gli eventi che tutti gli elementi HTML hanno in comune. In alcuni casi, tuttavia, sarà necessario accedere ai membri che l'interfaccia gestita non espone direttamente. In questo argomento vengono esaminati due modi per accedere a membri non esposti, incluse le funzioni JScript e VBScript definite all'interno di una pagina Web.
Accesso a membri non esposti tramite interfacce gestite
HtmlDocument e HtmlElement forniscono quattro metodi che consentono l'accesso a membri non esposti. Nella tabella seguente vengono illustrati i tipi e i relativi metodi corrispondenti.
Tipo di membro | Metodi |
---|---|
Proprietà (HtmlElement) | GetAttribute SetAttribute |
Metodi | InvokeMember |
Eventi (HtmlDocument) | AttachEventHandler DetachEventHandler |
Eventi (HtmlElement) | AttachEventHandler DetachEventHandler |
Eventi (HtmlWindow) | AttachEventHandler DetachEventHandler |
Quando si usano questi metodi, si presuppone che sia presente un elemento del tipo sottostante corretto. Si supponga di voler ascoltare l'evento Submit
di un elemento FORM
in una pagina HTML, in modo da poter eseguire alcune operazioni di pre-elaborazione sui valori FORM
prima che l'utente li invii al server. Idealmente, se si ha il controllo sul codice HTML, si definirà l'FORM
per avere un attributo ID
univoco.
<HTML>
<HEAD>
<TITLE>Form Page</TITLE>
</HEAD>
<BODY>
<FORM ID="form1">
... form fields defined here ...
</FORM>
</BODY>
</HTML>
Dopo aver caricato questa pagina nel controllo WebBrowser, è possibile utilizzare il metodo GetElementById per recuperare il FORM
in fase di esecuzione usando form1
come argomento.
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
Accesso alle interfacce non gestite
È anche possibile accedere ai membri non esposti nel DOM HTML gestito usando le interfacce COM (Component Object Model) non gestite esposte da ogni classe DOM. Questa operazione è consigliata se è necessario effettuare numerose chiamate a membri non esposti o se i membri non esposti restituiscono altre interfacce non gestite e non inglobate dal DOM HTML gestito.
La tabella seguente mostra tutte le interfacce non gestite esposte tramite il DOM HTML gestito. Fare clic su ogni collegamento per una spiegazione dell'utilizzo e per un codice di esempio.
Digitare | Interfaccia non gestita |
---|---|
HtmlDocument | DomDocument |
HtmlElement | DomElement |
HtmlWindow | DomWindow |
HtmlHistory | DomHistory |
Il modo più semplice per usare le interfacce COM consiste nell'aggiungere un riferimento alla libreria DOM HTML non gestita (MSHTML.dll) dall'applicazione, anche se questa operazione non è supportata.
Accesso alle funzioni script
Una pagina HTML può definire una o più funzioni usando un linguaggio di scripting, ad esempio JScript o VBScript. Queste funzioni vengono posizionate all'interno di una pagina SCRIPT
nella pagina e possono essere eseguite su richiesta o in risposta a un evento nel DOM.
È possibile chiamare qualsiasi funzione script definita in una pagina HTML usando il metodo InvokeScript. Se il metodo script restituisce un elemento HTML, è possibile usare un cast per convertire questo risultato restituito in un HtmlElement. Per informazioni dettagliate e codice di esempio, vedere InvokeScript.
Vedere anche
.NET Desktop feedback