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日

相关文章

  • C#数据绑定(DataBinding)简单实现方法

    C#数据绑定是现代软件开发中的一个非常重要的技术,它可以将各种数据源(例如:数据库、XML文档、Web服务、对象集合等)绑定到用户界面上的不同控件(例如:文本框、标签、列表框、表格等),并且随着数据的更改,控件中的内容也会自动更新。下面介绍C#数据绑定的简单实现方法。 准备工作 在进行数据绑定之前,我们需要创建一个Windows Form应用程序或ASP.N…

    C# 2023年6月1日
    00
  • 百万行WPF项目代码重构记录分析

    下面是关于“百万行WPF项目代码重构记录分析”的完整攻略,包含两个示例。 1. 为什么需要重构 在软件开发过程中,随着项目的不断迭代和扩展,代码会变得越来越复杂和难以维护。这时候就需要进行代码重构,以提高代码的可读性、可维护性和可扩展性。在WPF项目中,代码重构尤为重要,因为WPF项目通常包含大量的XAML代码和复杂的UI逻辑。 2. 代码重构的步骤 代码重…

    C# 2023年5月15日
    00
  • .NET中的MassTransit分布式应用框架详解

    以下是“.NET中的MassTransit分布式应用框架详解”的完整攻略: 什么是MassTransit MassTransit是一个开源的分布式应用框架,用于构建可扩展的、高可用的、松耦合的分布式应用程序。它基于消息传递模式,支持多种消息传递协议,例如RabbitMQ、Azure Service Bus、Amazon SQS等。 MassTrans的核心概…

    C# 2023年5月12日
    00
  • 深入理解C#指针之美

    深入理解C#指针之美 指针是计算机科学中相对较为高级的概念,C#作为一门高级语言,也为我们提供了对指针的支持。理解指针的概念和使用方法,有利于我们更好地编写高效的代码。本文将详细讲解C#指针的相关知识,包括指针的定义、初始化、取值、指针运算和指针与引用类型的关系等内容。 概述 指针是一种特殊的变量,它不仅可以存储一个数据的地址,而且可以使用该地址访问该数据。…

    C# 2023年6月6日
    00
  • C#中DataTable实现行列转换的方法

    下面是C#中DataTable实现行列转换的方法的完整攻略。 前言 在数据处理过程中,行列转换是常见的需求之一。在C#中,我们可以使用DataTable实现行列转换并进行后续操作。本文将详细介绍如何在C#中使用DataTable来实现行列转换。 方法一:使用LINQ进行转换 使用LINQ可以实现简单方便的行列转换。 步骤一:创建DataTable 首先,我们…

    C# 2023年5月31日
    00
  • 在Asp.net core项目中使用WebSocket

    在ASP.NET Core项目中使用Websocket是一项非常重要的技能,可以让我们实现实时交互和通讯、推送等功能。下面是在ASP.NET Core项目中使用Websocket的完整攻略: 步骤一:安装Microsoft.AspNetCore.WebSockets NuGet包 WebSocket 是一个独立的协议,所以我们需要安装一个 NuGet 包来帮…

    C# 2023年6月3日
    00
  • C#面向对象之模拟实现商城购物功能

    C#面向对象模拟实现商城购物功能可以分为以下几个步骤: 1. 创建商品类(Product)及其属性 第一步我们需要创建一个商品类,用来保存商品的相关信息。在C#中,创建类非常简单,只需要使用class关键字即可,具体实现如下: class Product { // 商品名称 public string Name { get; set; } // 商品价格 p…

    C# 2023年5月31日
    00
  • Entity Framework使用Code First模式管理视图

    Entity Framework是.NET中访问数据库的重要框架之一。在使用EF进行数据库开发时,常常需要管理视图。其中一种方式就是使用Code First模式。下面就是一个完整的攻略,帮助你使用EF的Code First模式管理视图。 步骤一:创建DbContext类 要使用EF进行Code First模式管理视图,首先需要创建一个DbContext类,用…

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