下面我将详细讲解C#调用JS的几种方法,并提供两个示例说明。
目录
- 通过WebBrowser控件调用
- 通过接口调用
- 通过JavaScriptSerializer序列化调用
- 示例说明
- 示例一:通过WebBrowser控件调用
- 示例二:通过接口调用
通过WebBrowser控件调用
WebBrowser控件可以加载本地HTML文件,也可以通过设置Navigate
方法加载网页,这样就可以很方便地调用JS代码了。
private void button1_Click(object sender, EventArgs e)
{
// 加载本地HTML文件
webBrowser1.Url = new Uri(@"C:\test.html");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// 调用JS代码
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement script = webBrowser1.Document.CreateElement("script");
script.SetAttribute("text", "function alertFromCsharp() { alert('Hello from C#'); }");
head.AppendChild(script);
webBrowser1.Document.InvokeScript("alertFromCsharp");
}
在上述代码中,我们首先通过设置WebBrowser控件的Url
属性加载了本地的HTML文件,当该文件加载完成后,我们就可以通过webBrowser1.Document.InvokeScript
方法来调用JS代码,这里我们定义了一个名为alertFromCsharp
的JS函数,并且在调用时弹出了一个Hello from C#
的提示框。
通过接口调用
除了通过WebBrowser控件调用,我们还可以通过接口来实现调用JS的功能,具体步骤如下:
- 创建一个类,并添加一个
ComVisible
属性。
csharp
[ComVisible(true)]
public class ScriptApi
{
public void callFunction(string str)
{
MessageBox.Show(str);
}
}
- 在
WebBrowser
控件的DocumentCompleted
事件中,将JS对象注入到HTML中。
csharp
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.ObjectForScripting = new ScriptApi();
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement script = webBrowser1.Document.CreateElement("script");
string js = "function callCSharpFunction(str) { window.external.callFunction(str); }";
script.SetAttribute("text", js);
head.AppendChild(script);
}
在上述代码中,我们首先通过ObjectForScripting
属性将ScriptApi
类注入到了HTML中,然后添加了一个名为callCSharpFunction
的JS函数,在该函数中调用了window.external.callFunction
来调用注入的ScriptApi
对象中的callFunction
方法。
- 通过JS调用C#方法。
javascript
<input type="button" onclick="callCSharpFunction('Hello from JS.');" value="调用C#方法">
在上述代码中,我们通过一个按钮来调用callCSharpFunction
函数,并且将'Hello from JS.'
作为参数传递给该函数,这样就可以实现JS调用C#方法的功能了。
通过JavaScriptSerializer序列化调用
除了上述两种方法,我们还可以通过JavaScriptSerializer
来将C#对象序列化为JS代码,然后再执行该代码,实现C#调用JS的功能。
JavaScriptSerializer serializer = new JavaScriptSerializer();
string obj = serializer.Serialize(new { param1 = "value1", param2 = "value2" });
webBrowser1.Document.InvokeScript("your_js_function", new object[] { obj });
在上述代码中,我们将一个匿名对象进行了序列化,并且通过InvokeScript
方法调用了名为your_js_function
的JS函数,并将序列化后的字符串作为参数传递给该函数。
示例说明
示例一:通过WebBrowser控件调用
创建一个名为test.html
的文件,并添加以下代码:
<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<meta charset="utf-8" />
</head>
<body>
<h1>Demo</h1>
<script>
function alertFromCsharp() {
alert("Hello from C#");
}
</script>
</body>
</html>
然后创建一个Windows Forms应用程序,在窗体中添加一个WebBrowser
控件和一个Button
控件,其代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Url = new Uri(@"C:\test.html");
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement script = webBrowser1.Document.CreateElement("script");
script.SetAttribute("text", "function alertFromCsharp() { alert('Hello from C#'); }");
head.AppendChild(script);
webBrowser1.Document.InvokeScript("alertFromCsharp");
}
}
在运行该程序后,点击按钮就可以调用JS代码并弹出Hello from C#
的提示框。
示例二:通过接口调用
创建一个Windows Forms应用程序,添加一个WebBrowser
控件,并在窗体中添加如下代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.ObjectForScripting = new ScriptApi();
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement script = webBrowser1.Document.CreateElement("script");
string js = "function callCSharpFunction(str) { window.external.callFunction(str); }";
script.SetAttribute("text", js);
head.AppendChild(script);
}
}
[ComVisible(true)]
public class ScriptApi
{
public void callFunction(string str)
{
MessageBox.Show(str);
}
}
在运行该程序后,当WebBrowser
控件加载完成后,我们就可以通过JS代码来调用C#中的callFunction
方法了。在HTML文件中添加一个按钮,并在按钮的onclick
事件中添加如下代码:
<input type="button" onclick="callCSharpFunction('Hello from JS.');" value="调用C#方法">
点击该按钮后,就可以弹出一个消息框显示Hello from JS.
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#调用JS的几种方法 - Python技术站