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 相关文章推荐
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
Jan 02 Javascript
超级简单的jquery操作表格方法
Dec 15 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
May 07 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
JavaScript判断DIV内容是否为空的方法
Jan 29 Javascript
Node.js的Express框架使用上手指南
Mar 12 Javascript
JQuery实现动态操作表格
Jan 11 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 Javascript
javascript使用正则实现去掉字符串前面的所有0
Jul 23 Javascript
jQuery实现表格隔行换色
Sep 01 jQuery
解决ant Design中this.props.form.validateFields未执行的问题
Oct 27 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
php实现通过ftp上传文件
2015/06/19 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
通用C#笔试题附答案
2016/11/26 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
鸿星尔克广告词
2014/03/21 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
初中毕业生感言
2015/07/31 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
5道关于python基础 while循环练习题
2021/11/27 Python
SQL注入详解及防范方法
2021/12/06 MySQL
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server