C#调用JS的几种方法

下面我将详细讲解C#调用JS的几种方法,并提供两个示例说明。

目录

  1. 通过WebBrowser控件调用
  2. 通过接口调用
  3. 通过JavaScriptSerializer序列化调用
  4. 示例说明
  5. 示例一:通过WebBrowser控件调用
  6. 示例二:通过接口调用

通过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的功能,具体步骤如下:

  1. 创建一个类,并添加一个ComVisible属性。

csharp
[ComVisible(true)]
public class ScriptApi
{
public void callFunction(string str)
{
MessageBox.Show(str);
}
}

  1. 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方法。

  1. 通过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技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • ASP.NET Core设置URLs的五种方法

    ASP.NET Core设置URLs的五种方法 在ASP.NET Core中,可以使用多种方法来设置应用程序的URL。本攻略将介绍五种设置URLs的方法,并提供两个示例说明。 方法一:使用appsettings.json文件 在ASP.NET Core中,可以使用appsettings.json文件来设置应用程序的URL。可以按照以下步骤操作: 在appse…

    C# 2023年5月16日
    00
  • C#中实现PriorityQueue优先级队列的代码

    实现PriorityQueue(优先级队列)在C#中是很常见的需求,下面我将为大家介绍如何使用C#编写PriorityQueue。 什么是PriorityQueue? PriorityQueue,即优先队列,是一种按照元素优先级进行排序的队列,具有以下特点: 在队列中插入元素时,会按照一定的优先级排序; 在队列中弹出元素时,会弹出队列中优先级最高的元素; 可…

    C# 2023年6月7日
    00
  • ASP.Net Core MVC基础系列之服务注册和管道

    ASP.Net Core MVC基础系列之服务注册和管道 在 ASP.Net Core MVC 中,服务注册和管道是非常重要的概念。本攻略将介绍 ASP.Net Core MVC 中的服务注册和管道,以及如何使用它们来构建 Web 应用程序。 服务注册 在 ASP.Net Core MVC 中,服务注册是指将服务添加到应用程序的依赖注入容器中。依赖注入容器是…

    C# 2023年5月17日
    00
  • .Net Core日志记录之第三方框架Serilog

    .NET Core日志记录之第三方框架Serilog 在本攻略中,我们将深入讲解如何使用第三方框架Serilog进行.NET Core日志记录,并提供两个示例说明。 什么是Serilog? Serilog是一个.NET Core日志记录框架,它提供了一种简单、灵活、可扩展的方式来记录应用程序的日志。Serilog支持多种输出格式和目标,包括控制台、文件、数据…

    C# 2023年5月17日
    00
  • C#连接加密的Sqlite数据库的方法

    针对“C#连接加密的Sqlite数据库的方法”的问题,我来给您提供以下完整攻略: 1. 准备工作 在开始C#连接加密的Sqlite数据库之前,我们需要先安装相关的软件工具,包括: Sqlite数据库,可通过官方网站(https://www.sqlite.org/download.html)下载对应的安装包 SQLite-Encrypt加密扩展,可通过NuGe…

    C# 2023年6月1日
    00
  • 详解ASP.NET Core中配置监听URLs的五种方式

    详解ASP.NET Core中配置监听URLs的五种方式 在ASP.NET Core应用程序中,可以通过配置监听URLs来指定应用程序监听的URL地址。本攻略将详细介绍ASP.NET Core中配置监听URLs的五种方式。 方式一:通过appsettings.json文件配置 可以通过在appsettings.json文件中添加以下代码来配置监听URLs: …

    C# 2023年5月16日
    00
  • C#实现扫描枪扫描二维码并打印(实例代码)

    C#实现扫描枪扫描二维码并打印 关于扫描枪 扫描枪(Barcode Scanner)是一种专门用于扫描条形码和二维码等机器可读码的手持式设备,可以通过扫描枪将机器可读码中的信息转化为电信号,并通过接口输出,以方便数据采集。它在生产、仓储、物流等诸多行业发挥了重要作用,大大提高了生产效率。 实现要点 在进行C#实现扫描枪扫描二维码并打印的时候,需要考虑以下几个…

    C# 2023年6月7日
    00
  • C#函数式编程中的部分应用详解

    C#函数式编程中的部分应用详解 简介 在函数式编程中,部分应用(Partial application)是一种非常重要的技术手段。它指的是对于一个有多个参数的函数,在给定一部分参数后,返回一个新函数,该函数只需要接受剩余的参数即可完成执行。这个过程中,新函数的参数比原函数的参数少。 实现 在C#中,我们可以通过使用实例化委托的方式来实现部分应用。 deleg…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部