WinForm与Javascript交互
在应用程序的集成过程中,有时候需要WinForm应用程序和Javascript程序进行交互。比如说:应用程序是一个综合调度系统,在整个综合调度系统中,要实现定位,显示地图。综合调度平台的大部分功能都是使用WinForm实现的;但是定位和地图部分都不是自己开发的需要使用第三方接口,实现地图的展示,而第三方的接口使用的是Javascript实现的。这种情况有一下两种方法解决:
1,浏览器显示地图,WinForm实现综合调度台的其他功能,使用socket通信方式或者其他方式实现web浏览器和综合调度台之间的一种交互。
2,使用WinForm的JS之间的直接交互。
以上两种方法:第一种方法明显的缺点就是整个综合调度台的风格不一致,而且在开发过程中,调试麻烦,调试过程受网络的影响较大。第二种方法却从根本上克服了以上所有缺点。
如何实现WinForm和Javascript之间的交互成为解决这个问题的核心问题。所谓交互就是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程序的一个测试!");
} }
}
WinForm与Javascript交互的更多相关文章
- C# WinForm 和 javascript进行交互 使用HTML做界面
01 using System; 02 using System.Collections.Generic; 03 using System.Text; 04 using System.Reflecti ...
- [转]C# winform与Javascript的相互调用
C# winform与Javascript的相互调用 <html> <head> <meta http-equiv="Content-Language" ...
- CEF与JavaScript交互读取电脑信息
CefSharp中c#和JavaScript交互读取电脑信息 介绍 CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目.与主要关注 ...
- Android混合开发之WebView与Javascript交互
前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...
- 移动端基于HTML模板和JSON数据的JavaScript交互
写本文之前,我正在做一个基于Tab页的订单中心: 每点击一个TAB标签,会请求对应状态的订单列表.之前的项目,我会在js里使用 + 连接符连接多个html内容: var html = ''; htm ...
- 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互
[源码下载] 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互 作者:webabcd 介 ...
- VC与JavaScript交互(一) --- 如何实现
为什么要让VC与JavaScript交互? 1.有时候我们需要让自己的软件打开一个网页,来获取页面上的一些数据.这时,可以用mshtml解析HTML提取出数据,也可以向HTML文档动态写入我们准备好的 ...
- MongoDB源码分析——mongo与JavaScript交互
mongo与JavaScript交互 源码版本为MongoDB 2.6分支 之前已经说过mongo是MongoDB提供的一个执行JavaScript脚本的客户端工具,执行js其实就是一个js和 ...
- Android WebView JavaScript交互
今天介绍一下,Android中Webview与JavaScript的交互,首先是在布局文件里添加webview控件: <WebView android:id="@+id/webview ...
随机推荐
- Android Studio设置行宽、格式化断行
设置基于Android studio 1.2,其它版本可能位置不大一样,可以直接搜索 1.设置行宽 就是那条右标准线的位置:Setting-->Editor-->Code Style,右侧 ...
- rem根元素的定义规则
<script> !function(a) { function b() { var b = g.getBoundingClientRect().width; var winpix=1; ...
- Spark SQL原理和实现--王家林老师
- apache错误 Unable to open process" with PID 4!
今天打开Apache的时候报错: 22:15:30 [Apache] Problem detected! 22:15:30 [Apache] Port 80 in use by "Una ...
- 前端基础之jQuery(Day55)
阅读目录 一 jQuery是什么? 二 什么是jQuery对象? 三 寻找元素(选择器和筛选器) 四 操作元素(属性,css,文档处理) 扩展方法 (插件机制) 一. jQuery是什么? [1] ...
- 使用Linq to XML 修改app.config
使用其他的方法修改app.config无效.而且修改的是*.vshost.exe.Config,程序运行时正常,关闭之后就还是原来的值. Configuration configuration = C ...
- Mspec
Machine.Specifications Machine.Specifications (MSpec) is a context/specification framework that remo ...
- P4949 最短距离(基环树+树链剖分)
题目 P4949 最短距离 做法 先把非树边提出来 查询\((x,y)\)的最短距离就分类查询:树上\((x,y)\)距离,经过非树边距离 带边权查询链长,一个烂大街的套路:树链剖分,节点维护树边距离 ...
- ES6数组的扩展--Array.from()和Array.of()
一. Array.from() : 将伪数组对象或可遍历对象转换为真数组 1.何为伪数组 如果一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,语法上称为"类 ...
- [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2028 Solved: 1187[Submit][St ...