Postupy: Implementace Two-Way komunikace mezi kódem DHTML a kódem klientské aplikace
Pomocí ovládacího prvku WebBrowser můžete do klientských aplikací Windows Forms přidat existující dynamický kód webové aplikace HTML (DHTML). To je užitečné, když jste investovali významnou dobu vývoje do vytváření ovládacích prvků založených na DHTML a chcete využít bohaté možnosti uživatelského rozhraní modelu Windows Forms, aniž byste museli přepisovat stávající kód.
Ovládací prvek WebBrowser umožňuje implementovat obousměrnou komunikaci mezi kódem klientské aplikace a skriptovacím kódem webové stránky prostřednictvím vlastností ObjectForScripting a Document. Kromě toho můžete nakonfigurovat ovládací prvek WebBrowser tak, aby se webové ovládací prvky bezproblémově prolínaly s jinými ovládacími prvky ve formuláři aplikace a skrývaly jejich implementaci DHTML. Pokud chcete bez problémů kombinovat ovládací prvky, naformátujte stránku tak, aby její barva pozadí a vizuální styl odpovídaly zbytku formuláře, a pomocí vlastností AllowWebBrowserDrop, IsWebBrowserContextMenuEnableda WebBrowserShortcutsEnabled zakažte standardní funkce prohlížeče.
Vložení DHTML do aplikace Windows Forms
Nastavte vlastnost AllowWebBrowserDrop ovládacího prvku WebBrowser na
false
, aby ovládací prvek WebBrowser nemohl otevírat soubory přetažené na něj.webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.AllowWebBrowserDrop = False
Nastavte vlastnost IsWebBrowserContextMenuEnabled ovládacího prvku na
false
, aby se ovládací prvek WebBrowser nezobrazil jeho místní nabídku, když na něj uživatel klikne pravým tlačítkem myši.webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.IsWebBrowserContextMenuEnabled = False
Nastavte vlastnost WebBrowserShortcutsEnabled ovládacího prvku na
false
, aby ovládací prvek WebBrowser nereagoval na klávesové zkratky.webBrowser1.WebBrowserShortcutsEnabled = false;
webBrowser1.WebBrowserShortcutsEnabled = False
Nastavte vlastnost ObjectForScripting v konstruktoru formuláře nebo přepište metodu OnLoad.
Následující kód používá samotnou třídu formuláře pro skriptovací objekt.
webBrowser1.ObjectForScripting = new MyScriptObject(this);
webBrowser1.ObjectForScripting = New MyScriptObject(Me)
Implementujte skriptovací objekt.
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
Pomocí objektu
window.external
ve skriptovacím kódu můžete přistupovat k veřejným vlastnostem a metodám zadaného objektu.Následující kód HTML ukazuje, jak volat metodu na skriptovací objekt z kliknutí na tlačítko. Zkopírujte tento kód do elementu BODY dokumentu HTML, který načtete pomocí Navigate metody ovládacího prvku nebo které přiřadíte k DocumentText vlastnosti ovládacího prvku.
<button onclick="window.external.Test('called from script code')"> call client code from script code </button>
Implementujte funkce v kódu skriptu, který bude váš kód aplikace používat.
Následující element HTML SCRIPT poskytuje ukázkovou funkci. Zkopírujte tento kód do elementu HEAD dokumentu HTML, který načtete pomocí Navigate metody ovládacího prvku nebo který přiřadíte k vlastnosti DocumentText ovládacího prvku.
<script> function test(message) { alert(message); } </script>
Pomocí vlastnosti Document získejte přístup k kódu skriptu z kódu klientské aplikace.
Do obslužné rutiny události tlačítka Click přidejte například tento kód.
webBrowser1.Document.InvokeScript("test", new String[] { "called from client code" });
webBrowser1.Document.InvokeScript("test", _ New String() {"called from client code"})
Po dokončení ladění DHTML nastavte vlastnost ScriptErrorsSuppressed ovládacího prvku na
true
, aby ovládací prvek WebBrowser nezobrazil chybové zprávy pro problémy s kódem skriptu.// Uncomment the following line when you are finished debugging. //webBrowser1.ScriptErrorsSuppressed = true;
' Uncomment the following line when you are finished debugging. 'webBrowser1.ScriptErrorsSuppressed = True
Příklad
Následující úplný příklad kódu obsahuje ukázkovou aplikaci, kterou můžete použít k pochopení této funkce. HTML kód se načítá do ovládacího prvku WebBrowser prostřednictvím vlastnosti DocumentText místo toho, aby byl načten ze samostatného souboru HTML.
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
Kompilace kódu
Tento kód vyžaduje:
- Odkazy na sestavení System a System.Windows.Forms.
Viz také
.NET Desktop feedback