zoukankan      html  css  js  c++  java
  • 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程序的一个测试!");  
            }  
    
        }
    }
    
  • 相关阅读:
    比较器
    堆排序
    快速排序
    荷兰国旗问题
    python查漏补缺 --- 基础概念及控制结构
    redis 交集、并集、差集
    spark问题
    IDEA写scala简单操作
    hive 中遇到的正则
    scala模式匹配
  • 原文地址:https://www.cnblogs.com/jiangshuai52511/p/8669002.html
Copyright © 2011-2022 走看看