浅谈C#下winform和JS的互相调用和传参(webbrowser)

浅谈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技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 详解C# Socket简单例子(服务器与客户端通信)

    下面我将为您详细讲解“详解C# Socket简单例子(服务器与客户端通信)”的完整攻略。 一、C# Socket简介 Socket(套接字)是一个抽象层,它提供了一种机制,可以使独立进程间或同一进程内的两个不同套接字之间相互通信。通俗点讲,就是在IP协议上实现的传输层。 二、使用C# Socket实现服务器与客户端通信 2.1 创建服务器程序 //创建Soc…

    C# 2023年6月1日
    00
  • C#如何绑定多个按钮到同一个事件

    首先,在C#中,我们可以定义一个事件的处理函数,然后将多个按钮的Click事件都绑定到该处理函数。这样,在任意一个按钮被点击时,都会执行该处理函数。 下面是绑定多个按钮到同一个事件的完整攻略: 1. 定义事件处理函数 首先,在C#中定义一个事件处理函数,如下所示: private void btn_Click(object sender, EventArgs…

    C# 2023年6月6日
    00
  • C#使用泛型队列Queue实现生产消费模式

    一、概述 生产消费模式是一种常用的多线程编程模型,生产者不断向队列中添加任务,消费者从队列中取出任务进行处理。生产者和消费者在不同的线程中运行,通过队列实现线程之间的协作。在 C# 中,可以使用泛型队列 Queue 来实现生产消费模式。本文将详细介绍如何使用 C# 中的泛型队列 Queue 实现生产消费模式。 二、生产消费模式实现步骤 创建泛型队列 Queu…

    C# 2023年6月7日
    00
  • c#使用EPPlus封装excel表格导入功能的问题

    下面我将详细讲解“c#使用EPPlus封装excel表格导入功能的问题”的完整攻略。 1. 确定使用的库和环境 首先,我们需要确定使用哪一个库来读取和导入Excel表格数据。在这里,我们使用EPPlus库。EPPlus是一个用于在ASP.NET程序中读取和导出Excel工作簿的开源库。它提供了一组易于使用的API,可以灵活地读取和修改Excel文档。要使用E…

    C# 2023年6月3日
    00
  • ASP.NET Core中的Blazor组件介绍

    ASP.NET Core中的Blazor组件介绍 Blazor是一种使用C#和.NET构建Web应用程序的新兴技术。它允许开发人员使用C#编写客户端代码,并在浏览器中运行。Blazor组件是Blazor应用程序的基本构建块,本攻略将介绍ASP.NET Core中的Blazor组件。 Blazor组件 Blazor组件是Blazor应用程序的基本构建块。它们是…

    C# 2023年5月17日
    00
  • 详解.NET Core使用Quartz执行调度任务进阶

    在 .NET Core 中,可以使用 Quartz.NET 来执行调度任务。Quartz.NET 是一个开源的作业调度框架,可以用于在 .NET 应用程序中执行定时任务、计划任务等。以下是详解 .NET Core 使用 Quartz 执行调度任务进阶的完整攻略: 步骤一:安装 Quartz.NET 在 .NET Core 项目中,可以使用 NuGet 包管理…

    C# 2023年5月17日
    00
  • js操作数据库实现注册和登陆的简单实例

    下面是关于“js操作数据库实现注册和登陆的简单实例”的完整攻略。 1. 准备工作 在开始操作数据库实现注册和登陆之前,需要进行以下准备工作: 安装 Node.js 以及相应的依赖模块。可以通过 npm 来安装依赖,具体的依赖包括 mysql、express、body-parser 等。这里以 mysql 和 express 为例进行说明,安装命令如下: ba…

    C# 2023年5月31日
    00
  • C#使用TimeSpan时间计算的简单实现

    这里是关于C#使用TimeSpan时间计算的简单实现的详细攻略。 1. 安装和引用TimeSpan类库 首先需要在项目中添加using System;,以便使用TimeSpan类。在命名空间调用后,就可以开始用TimeSpan计算时间了。 2. 定义时间 你可以使用TimeSpan构造函数来定义时间,以获取所需的小时、分钟和秒。 TimeSpan ts = …

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