Postupy: Implementace obousměrné komunikace mezi kódem DHTML a kódem klientské aplikace
Ovládací prvek můžete použít WebBrowser k přidání existujícího dynamického kódu webové aplikace HTML (DHTML) do model Windows Forms klientských aplikací. 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í model Windows Forms bez nutnosti přepisovat stávající kód.
Ovládací WebBrowser prvek umožňuje implementovat obousměrnou komunikaci mezi kódem klientské aplikace a skriptovacím kódem webové stránky prostřednictvím ObjectForScripting vlastností a Document vlastností. Kromě toho můžete ovládací prvek nakonfigurovat WebBrowser tak, aby se webové ovládací prvky hladce prolínaly s jinými ovládacími prvky ve formuláři aplikace a skrývaly jejich implementaci DHTML. Chcete-li 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í AllowWebBrowserDropIsWebBrowserContextMenuEnabled, a WebBrowserShortcutsEnabled vlastnosti zakázat standardní funkce prohlížeče.
Vložení DHTML do aplikace model Windows Forms
WebBrowser Nastavte vlastnost ovládacího prvku tak, aby
false
ovládací prvek AllowWebBrowserDrop nemohl WebBrowser otevírat soubory, které na něj byly vyřazeny.webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.AllowWebBrowserDrop = False
Nastavte vlastnost ovládacího prvku tak, aby
false
ovládací prvek IsWebBrowserContextMenuEnabled nezobrazil WebBrowser 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 ovládacího prvku tak, aby
false
ovládací prvek WebBrowserShortcutsEnabled nereagoval WebBrowser na klávesové zkratky.webBrowser1.WebBrowserShortcutsEnabled = false;
webBrowser1.WebBrowserShortcutsEnabled = False
ObjectForScripting Nastavte vlastnost v konstruktoru formuláře nebo přepsat metoduOnLoad.
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
window.external
Objekt ve skriptovacím kódu použijte pro přístup 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í metody ovládacího prvku Navigate nebo který přiřadíte k vlastnosti ovládacího prvku DocumentText .
<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í metody ovládacího prvku Navigate nebo který přiřadíte k vlastnosti ovládacího prvku DocumentText .
<script> function test(message) { alert(message); } </script>
Document Pomocí vlastnosti můžete získat přístup k kódu skriptu z kódu klientské aplikace.
Přidejte například následující kód do obslužné rutiny události tlačítka Click .
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 ovládacího prvku ScriptErrorsSuppressed tak, aby
true
ovládací prvek nezobrazil WebBrowser zobrazování chybových zpráv 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. Kód HTML se načte do WebBrowser ovládacího prvku prostřednictvím DocumentText vlastnosti místo 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
Probíhá kompilace kódu
Tento kód vyžaduje:
- Odkazy na sestavení System a System.Windows.Forms.
Viz také
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro