Javascript调用C#代码


Posted in Javascript onJanuary 17, 2011

本文介绍的是嵌入在.Net的WebBrowser控件中显示的HTML文件中的Javascript如何调用C#代码。现在在客户端程序中嵌入网页的做法已经非常普遍了,例如腾讯的新闻弹出框之类的。
.Net的WebBrowser用的内核应该还是IE的。IE中,window对象有个external属性,这个属性提供了一个外部接口。可以执行宿主代码。要通过这个属性来调用C#方法,其宿主对象必须是ComVisible的。例如,我们在一个Form上放置一个WebBrowser控件,另外准备一个方法OpenForm供js调用。

[System.Runtime.InteropServices.ComVisibleAttribute(true)] 
public partial class Main : KSBiz.UI.KSForm 
{ 
public Main() 
{ 
InitializeComponent(); 
} 
//其余略 
public void OpenForm(string s) 
{ 
BasicInfo.CustomerList f = new StockManage.BasicInfo.CustomerList(); 
f.Show(); 
f.MdiParent = this; 
webBrowser1.Visible = false; 
} 
}

再准备一个html文件:
<body> 
<h1>欢迎使用</h1> 
<a href='#' onclick='window.external.OpenForm("test");' >客户列表</a> 
</body>

在HTML文件中,就可以通过如上的方法来调用C#的方法。
在FormLoad事件中,为WebBrowser控件设置url,以及设置脚本执行的宿主:
private void Main_Load(object sender, EventArgs e) 
{ 
System.IO.FileInfo file = new System.IO.FileInfo("top.htm"); 
// WebBrowser控件显示的网页路径 
webBrowser1.Url = new Uri(file.FullName); 
// 将当前类设置为可由脚本访问 
webBrowser1.ObjectForScripting = this; 
}

这样就好了。
Javascript 相关文章推荐
懒就要懒到底——鼠标自动点击(含时间判断)
Feb 20 Javascript
JS setCapture 区域外事件捕捉
Mar 18 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
微信小程序 WebSocket详解及应用
Jan 21 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
May 04 jQuery
Vue 表单控件绑定的实现示例
Aug 11 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
Nov 13 Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 Javascript
Vue 源码分析之 Observer实现过程
Mar 29 Javascript
关于TypeScript模块导入的那些事
Jun 12 Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 Javascript
如何构建一个Vue插件并生成npm包
Oct 26 Javascript
js的写法基础分析
Jan 17 #Javascript
js 动态文字滚动的例子
Jan 17 #Javascript
JavaScript中的Array对象使用说明
Jan 17 #Javascript
改进UCHOME的记录发布,增强可访问性用户体验
Jan 17 #Javascript
对xmlHttp对象的理解
Jan 17 #Javascript
对xmlHttp对象方法和属性的理解
Jan 17 #Javascript
Grid得到选择行数据的方法总结
Jan 17 #Javascript
You might like
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python实现自动发送邮件功能
2021/03/02 Python
django ajax json的实例代码
2018/05/29 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
Python编写单元测试代码实例
2020/09/10 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
最新大学生创业计划书写作攻略
2014/04/02 职场文书
社区活动总结报告
2014/05/05 职场文书
python数据处理之Pandas类型转换
2022/04/28 Python