WinForm与Javascript交互

来源:互联网 发布:usb摄像头软件 编辑:程序博客网 时间:2024/06/04 12:27

在应用程序的集成过程中,有时候需要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=utf-8" />

<title>Main Page</title> 

<script type="text/javascript" language="javascript">

function  ShopXG(obj)

 {

    alert(obj);

  //alert("我要开网店、携购独立网店系统,模板最全,最专业的系统!");

 }

  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事件。

         后台代码如下:

    //要想调用JS的类都需要添加一下两句[PermissionSet(SecurityAction.Demand, Name ="FullTrust")][System.Runtime.InteropServices.ComVisibleAttribute(true)]publicpartialclassForm1:Form    {       publicForm1()        {            InitializeComponent();            this.webBrowser1.Url =newUri("D://text.html");            webBrowser1.ObjectForScripting =this;    //这句是必不可少的,是调用JS的前提        }        privatevoidbutton1_Click(objectsender,EventArgse)        {            webBrowser1.Document.InvokeScript("ShopXG",newobject[]{"这是WinForm调用JS的一个测试!"});        }        publicvoidShowMessage(stringmessage)        {            MessageBox.Show("这是JS调用的WinFormc程序的一个测试!");        }

转自:WinForm与Javascript交互

拓展:C# winform与Javascript的相互调用