浅谈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# Split函数根据特定分隔符分割字符串的操作

    C#中的Split函数可以帮助我们快速地根据指定的分隔符将字符串分成若干段。下面是这个操作的完整攻略: 1. 确定要分割的字符串 首先,需要确定要分割的字符串的内容。可以直接从用户的输入中获取,也可以在程序中事先写好。 例如,我们有一个字符串需要分割: string str = "hello,world"; 2. 定义分隔符 接下来,需要…

    C# 2023年6月6日
    00
  • Asp.net mvc 数据调用示例代码

    Asp.net mvc 是一种基于模型-视图-控制器(MVC)模式的Web开发框架。在架构上,它分为三个部分:模型(Model)、视图(View)和控制器(Controller)。其中,控制器负责处理用户请求,更新模型和最终呈现视图。在此过程中,数据调用也是非常重要的一个部分。在下面的攻略中,我们将详细讲解 Asp.net mvc 数据调用的示例代码。 1.…

    C# 2023年5月31日
    00
  • C#实现获取程序路径方法小结

    C#实现获取程序路径方法小结 在开发C#程序时,有时候需要获取当前程序的路径,可以使用以下方法。 获取当前程序运行路径 以下是获取当前程序运行的路径的代码: string path = AppDomain.CurrentDomain.BaseDirectory; //或者使用以下逻辑 string path2 = System.IO.Directory.Ge…

    C# 2023年6月7日
    00
  • c# Base64编码和图片的互相转换代码

    下面是关于“c# Base64编码和图片的互相转换代码”的完整攻略: Base64编码 Base64编码是将二进制数据通过64个可打印字符来表示的一种编码方式。在C#中,我们可以使用Convert.ToBase64String()方法将一个byte数组进行Base64编码,方法原型如下: public static string ToBase64String…

    C# 2023年6月3日
    00
  • C# 表达式目录树Expression的实现

    下面就是关于C#表达式目录树(Expression)的实现攻略。 什么是C#表达式目录树(Expression)? C#表达式目录树(Expression)是一种编程语言特性,用于表示特定语言结构的树形数据结构。它是.NET框架中的一个重要组件,用于功能扩展、动态代码生成和编程语言实现等方面。 C#表达式目录树(Expression)的实现 创建表达式 首先…

    C# 2023年6月1日
    00
  • 在C#项目中如何使用NHibernate详解

    在C#项目中使用NHibernate需要注意以下几个步骤: 1.安装NHibernate 可以通过NuGet包管理器来安装NHibernate,在Visual Studio中右键点击项目 -> “管理NuGet程序包”。在搜索框中输入”NHibernate”,选择安装即可。 2.配置NHibernate NHibernate的配置需要在App.conf…

    C# 2023年5月31日
    00
  • .Net Core项目中NLog整合Exceptionless实例

    .NET Core项目中NLog整合Exceptionless实例 NLog是一个流行的日志记录库,可以在.NET Core项目中使用。Exceptionless是一个开源的错误和日志记录平台,可以帮助开发人员快速识别和解决问题。本文将介绍如何在.NET Core项目中整合NLog和Exceptionless,以便更好地记录和管理日志和错误。 准备工作 在开…

    C# 2023年5月17日
    00
  • ASP.NET Core实现自动依赖注入

    在本攻略中,我们将详细讲解如何在ASP.NET Core中实现自动依赖注入,并提供两个示例说明。 步骤一:安装依赖注入包 在ASP.NET Core中实现自动依赖注入之前,您需要安装依赖注入包。以下是一个示例: dotnet add package Microsoft.Extensions.DependencyInjection 在上面的代码中,我们使用do…

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