Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede usar el WebBrowser control para agregar código de aplicación web HTML dinámico (DHTML) existente a las aplicaciones cliente de Windows Forms. Esto resulta útil cuando ha invertido un tiempo de desarrollo significativo en la creación de controles basados en DHTML y quiere aprovechar las completas funcionalidades de la interfaz de usuario de Windows Forms sin tener que volver a escribir código existente.
El WebBrowser control permite implementar la comunicación bidireccional entre el código de la aplicación cliente y el código de scripting de la página web a través de las propiedades ObjectForScripting y Document. Además, puede configurar el WebBrowser control para que los controles web se combinen sin problemas con otros controles del formulario de aplicación, ocultando su implementación DHTML. Para combinar sin problemas los controles, dé formato a la página para que su color de fondo y estilo visual coincidan con el resto del formulario y use las AllowWebBrowserDroppropiedades , IsWebBrowserContextMenuEnabledy WebBrowserShortcutsEnabled para deshabilitar las características estándar del explorador.
Para insertar DHTML en la aplicación de Windows Forms
Establezca la propiedad del control WebBrowser en AllowWebBrowserDrop para evitar que el control
false
abra los archivos que se han arrastrado sobre él.webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.AllowWebBrowserDrop = False
Establezca la propiedad del IsWebBrowserContextMenuEnabled control en
false
para impedir que el WebBrowser control muestre su menú contextual cuando el usuario haga clic con el botón derecho en él.webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.IsWebBrowserContextMenuEnabled = False
Establezca la propiedad del control WebBrowserShortcutsEnabled a
false
para evitar que el control WebBrowser responda a las teclas de acceso rápido.webBrowser1.WebBrowserShortcutsEnabled = false;
webBrowser1.WebBrowserShortcutsEnabled = False
Establezca la ObjectForScripting propiedad en el constructor del formulario o invalide el OnLoad método .
El código siguiente usa la propia clase de formulario para el objeto de scripting.
webBrowser1.ObjectForScripting = new MyScriptObject(this);
webBrowser1.ObjectForScripting = New MyScriptObject(Me)
Implemente el objeto de scripting.
public class MyScriptObject { private Form1 _form; public MyScriptObject(Form1 form) { _form = form; } public void Test(string message) { MessageBox.Show(message, "client code"); } }
Public Class MyScriptObject Private _form As Form1 Public Sub New(ByVal form As Form1) _form = form End Sub Public Sub Test(ByVal message As String) MessageBox.Show(message, "client code") End Sub End Class
Use el objeto
window.external
en el código de scripting para tener acceso a las propiedades y métodos públicos del objeto especificado.El código HTML siguiente muestra cómo llamar a un método en el objeto de scripting desde un clic de botón. Copie este código en el elemento BODY de un documento HTML que cargue mediante el método Navigate del control o que asigne a la propiedad DocumentText del control.
<button onclick="window.external.Test('called from script code')"> call client code from script code </button>
Implemente funciones en el código de script que usará el código de la aplicación.
El siguiente elemento HTML SCRIPT proporciona una función de ejemplo. Copie este código en el elemento HEAD de un documento HTML que cargue mediante el método Navigate del control o que asigne a la propiedad DocumentText del control.
<script> function test(message) { alert(message); } </script>
Usa la propiedad Document para acceder al código de script desde tu aplicación cliente.
Por ejemplo, agregue el código siguiente a un controlador de eventos de botón Click .
webBrowser1.Document.InvokeScript("test", new String[] { "called from client code" });
webBrowser1.Document.InvokeScript("test", _ New String() {"called from client code"})
Cuando haya terminado de depurar el DHTML, establezca la propiedad del ScriptErrorsSuppressed control en
true
para evitar que el WebBrowser control muestre mensajes de error relacionados con problemas de código de script.// Uncomment the following line when you are finished debugging. //webBrowser1.ScriptErrorsSuppressed = true;
' Uncomment the following line when you are finished debugging. 'webBrowser1.ScriptErrorsSuppressed = True
Ejemplo
En el siguiente ejemplo de código completo se proporciona una aplicación de demostración que puede usar para comprender esta característica. El código HTML se carga en el WebBrowser control a través de la DocumentText propiedad en lugar de cargarse desde un archivo HTML independiente.
using System;
using System.Windows.Forms;
public class Form1 : Form
{
private WebBrowser webBrowser1 = new WebBrowser();
private Button button1 = new Button();
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
public Form1()
{
button1.Text = "call script code from client code";
button1.Dock = DockStyle.Top;
button1.Click += new EventHandler(button1_Click);
webBrowser1.Dock = DockStyle.Fill;
Controls.Add(webBrowser1);
Controls.Add(button1);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.WebBrowserShortcutsEnabled = false;
webBrowser1.ObjectForScripting = new MyScriptObject(this);
// Uncomment the following line when you are finished debugging.
//webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.DocumentText =
"<html><head><script>" +
"function test(message) { alert(message); }" +
"</script></head><body><button " +
"onclick=\"window.external.Test('called from script code')\">" +
"call client code from script code</button>" +
"</body></html>";
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Document.InvokeScript("test",
new String[] { "called from client code" });
}
}
public class MyScriptObject
{
private Form1 _form;
public MyScriptObject(Form1 form)
{
_form = form;
}
public void Test(string message)
{
MessageBox.Show(message, "client code");
}
}
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private webBrowser1 As New WebBrowser()
Private WithEvents button1 As New Button()
<STAThread()> _
Public Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
Public Sub New()
button1.Text = "call script code from client code"
button1.Dock = DockStyle.Top
webBrowser1.Dock = DockStyle.Fill
Controls.Add(webBrowser1)
Controls.Add(button1)
End Sub
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
webBrowser1.AllowWebBrowserDrop = False
webBrowser1.IsWebBrowserContextMenuEnabled = False
webBrowser1.WebBrowserShortcutsEnabled = False
webBrowser1.ObjectForScripting = New MyScriptObject(Me)
' Uncomment the following line when you are finished debugging.
'webBrowser1.ScriptErrorsSuppressed = True
webBrowser1.DocumentText = _
"<html><head><script>" & _
"function test(message) { alert(message); }" & _
"</script></head><body><button " & _
"onclick=""window.external.Test('called from script code')"" > " & _
"call client code from script code</button>" & _
"</body></html>"
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles button1.Click
webBrowser1.Document.InvokeScript("test", _
New String() {"called from client code"})
End Sub
End Class
Public Class MyScriptObject
Private _form As Form1
Public Sub New(ByVal form As Form1)
_form = form
End Sub
Public Sub Test(ByVal message As String)
MessageBox.Show(message, "client code")
End Sub
End Class
Compilar el código
Este código requiere:
- Referencias a los ensamblados System y System.Windows.Forms.
Consulte también
.NET Desktop feedback