浅谈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#用Lambda和委托实现模板方法

    C#中可以使用Lambda表达式和委托来实现模板方法。模板方法是一种经典的设计模式,它将算法的骨架定义在一个抽象类中,而将一些步骤的具体实现留给子类来实现。下面是C#中使用Lambda和委托实现模板方法的详细攻略: 1. 定义抽象类 首先,我们需要定义一个抽象类,其中包含定义算法步骤的方法: public abstract class Algorithm {…

    C# 2023年6月8日
    00
  • C#使用LOCK实现线程同步

    下面我将详细讲解如何使用C#中的lock语句实现线程同步。 什么是lock语句 lock语句是C#中用于保护共享资源的关键字。当多个线程访问一个共享资源时,可能会引发竞态条件(Race Condition)的问题,这时就需要使用lock语句来防止竞态条件的发生。lock语句会将一段关键代码标记为临界区,同一时间只允许一个线程进入临界区执行代码,其他线程需要等…

    C# 2023年6月1日
    00
  • asp.net 在客户端显示服务器端任务处理进度条的探讨

    一、技术原理简介 在 ASP.NET 中,我们可以使用 AJAX 技术来实现异步通信,从而达到在不刷新整个页面的情况下更新页面内容的目的。其中,可以使用 UpdatePanel 控件实现部分更新,也可以使用 jQuery 或者原生 JavaScript 的 AJAX 方法手动处理异步请求和响应。 而在处理较为耗时的服务器端任务时,我们可以使用异步处理方法,如…

    C# 2023年6月1日
    00
  • .NET Core项目使用swagger开发组件

    .NET Core项目使用Swagger开发组件 Swagger是一种用于描述RESTful Web服务的标准格式,它可以帮助我们生成API文档和客户端代码。在.NET Core项目中,我们可以使用Swagger来开发组件。本攻略将详细介绍如何在.NET Core项目中使用Swagger开发组件。 环境要求 在进行.NET Core项目使用Swagger开发…

    C# 2023年5月17日
    00
  • C#创建及访问网络硬盘的实现

    C#创建及访问网络硬盘的实现 什么是网络硬盘 网络硬盘是一种将物理硬盘或云存储服务通过网络连接的形式,使得用户可以使用网络来进行硬盘存储和获取数据的设备或服务。 实现 在C#中,可以通过调用System.IO命名空间下的Directory类和File类等来创建及访问网络硬盘。 创建文件夹 对于创建文件夹,可以通过Directory.CreateDirecto…

    C# 2023年6月1日
    00
  • Windows中利用计划任务实现自动备份文件

    在Windows中,可以使用计划任务(Task Scheduler)来定期自动备份文件。计划任务是Windows自带的一种工具,可以在指定的时间自动运行程序或脚本。本文将介绍如何使用计划任务实现自动备份文件的完整攻略。 步骤一:创建备份脚本 首先,需要创建一个备份脚本,用于备份指定的文件或目录。以下是一个备份脚本的示例: #!/bin/bash # 备份源目…

    C# 2023年5月15日
    00
  • asp.net错误捕获(错误处理)page_error事件使用方法

    当ASP.NET应用程序运行时,可能会发生许多错误,如页面不存在、数据库连接丢失、未处理异常等。这些错误可能会使您的应用程序崩溃或给用户带来糟糕的体验。为此ASP.NET提供了一个Page_Error事件来捕获未处理的错误并进行处理。 下面是使用Page_Error事件的示例: void Page_Error(object sender, EventArgs…

    C# 2023年5月15日
    00
  • C# StringBuilder.Remove()方法:

    StringBuilder.Remove() 方法用于删除字符串中的一段指定长度的字符,它返回一个新的 StringBuilder 对象,表示经过删除后的字符串。 使用方法: StringBuilder.Remove(int startIndex, int length); 参数说明: startIndex:开始删除的位置的索引。 length:删除的长度。…

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