浅谈C#下winform和JS的互相调用和传参(webbrowser)
在C#开发中,WinForms是常见的桌面应用程序开发方式,而JavaScript(简称JS)则是Web前端开发中的基础语言,两者有时需要相互调用和传参,下面是一个完整攻略。
1.首先,在WinForms中内置了一个WebBrowser控件,可以加载HTML页面并且可以调用JavaScript函数。
2.要实现C#中调用JS函数,可以使用WebBrowser控件中的Document属性和InvokeScript方法。Document属性是一个表示HtmlDocument对象的属性,该对象包含整个HTML文档的元素和数据,而InvokeScript方法可调用自定义的JavaScript函数。下面是一个简单的示例,该示例在Windows窗体中创建一个名为MyBrowser的WebBrowser控件,然后加载一个简单的HTML页面,并在该页面中调用JavaScript函数。
private void button1_Click(object sender, EventArgs e)
{
MyBrowser.Navigate("file://C:/test.html");
}
private void MyBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElementCollection elements = MyBrowser.Document.GetElementsByTagName("input");
foreach (HtmlElement element in elements)
{
if (element.GetAttribute("type").Equals("button"))
{
element.InvokeMember("click");
}
}
}
private void MyBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
MyBrowser.ObjectForScripting = this;
}
public void SayHello()
{
MessageBox.Show("Hello from JS!");
}
代码中,我们在button1按钮的Click事件中调用了MyBrowser控件的Navigate方法,加载指定的HTML文件。在MyBrowser控件的DocumentCompleted事件中,我们在HTML页面中找到了名为input的元素,并调用了其中的click事件。最后,我们将Windows窗体对象设置为MyBrowser控件的ObjectForScripting属性,以便在JavaScript中访问该对象中的方法。
HTML页面中的代码如下,点击按钮会触发函数SayHello:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<script type="text/javascript">
function SayHello()
{
window.external.SayHello();
}
</script>
</head>
<body>
<h1>Hello world!</h1>
<input type="button" value="Click me" onclick="SayHello()"/>
</body>
</html>
3.要实现JS中调用C#函数,可以使用window.external对象,该对象是WebBrowser控件的默认ObjectForScripting属性值。我们可以从JavaScript中访问该对象,并调用其中的方法。下面是一个简单的代码示例,该示例在HTML页面中加载了一个WinForms窗体,然后在该窗体中调用了一个名为SayHello的方法,并传递了一个参数。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void SayHello(string name)
{
MessageBox.Show("Hello " + name + "!");
}
}
private void MyBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MyBrowser.Document.InvokeScript("MyFunction", new object[] { "World" });
// JavaScript: window.external.MyFunction("World");
}
HTML页面中的代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<script type="text/javascript">
function MyFunction(name)
{
window.external.SayHello(name);
}
</script>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
以上就是WinForms中实现C#与JS之间互相调用和传参的攻略,通过以上的示例代码可以更好的理解相关实现原理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈C#下winform和JS的互相调用和传参(webbrowser) - Python技术站