WinForm与Javascript交互

在应用程序的集成过程中,有时候需要WinForm应用程序和Javascript程序进行交互。比如说:应用程序是一个综合调度系统,在整个综合调度系统中,要实现定位,显示地图。综合调度平台的大部分功能都是使用WinForm实现的;但是定位和地图部分都不是自己开发的需要使用第三方接口,实现地图的展示,而第三方的接口使用的是Javascript实现的。这种情况有一下两种方法解决:

    1,浏览器显示地图,WinForm实现综合调度台的其他功能,使用socket通信方式或者其他方式实现web浏览器和综合调度台之间的一种交互。

    2,使用WinFormJS之间的直接交互。

    以上两种方法:第一种方法明显的缺点就是整个综合调度台的风格不一致,而且在开发过程中,调试麻烦,调试过程受网络的影响较大。第二种方法却从根本上克服了以上所有缺点。

    如何实现WinFormJavascript之间的交互成为解决这个问题的核心问题。所谓交互就是WinForm的应用程序能够调用Javascript的程序接口,同时JS的程序也能够调用WinForm的应用程序接口。

(1)首先创建一个网页命名为:text.html  假设该网页的路径为:D://text.html

   代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>Main Page</title> 
<script type="text/javascript" language="javascript">
function  ShopXG(obj)
 {
    alert(obj);
 }

function  InvokeFunc()
 {
    window.external.ShowMessage("呵呵");
 }
</script>
</head>

<body>
    <input type="button" id="aa" value="测试" onclick="InvokeFunc();"/>
</body>

(2)创建一个WinForm应用程序,在应用程序窗体上添加一个浏览器控件:webBrowser1 

(3)WinForm的窗体Form1中添加一个button按钮。Button1用来测试调用JS事件。

   后台代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Windows.Forms;

namespace WinformAddJavaScript
{
    //要想调用JS的类都需要添加以下两句  

    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]

    [System.Runtime.InteropServices.ComVisibleAttribute(true)]  
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.webBrowser1.Url = new Uri(@"D:/text.html");
            webBrowser1.ObjectForScripting = this;    //这句是必不可少的,是调用JS的前提  
        }

        private void button1_Click(object sender, EventArgs e)
        {
            webBrowser1.Document.InvokeScript("ShopXG",new object[]{"这是WinForm调用JS的一个测试!"});
        }

        public void ShowMessage(string message)  
        {  
            MessageBox.Show(message + "这是JS调用的WinFormc程序的一个测试!");  
        }  

    }
}
原文地址:https://www.cnblogs.com/jiangshuai52511/p/8669002.html