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 相关文章推荐
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
Nov 04 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
js实现编辑div节点名称的方法
Dec 17 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
jquery转盘抽奖功能实现
Nov 13 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
JS鼠标3次点击事件实现代码及扩展思路
Sep 12 Javascript
vue中轮训器的使用
Jan 27 Javascript
Vuex中的Mutations的具体使用方法
Jun 01 Javascript
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
JS前端轻量fabric.js系列物体基类
Aug 05 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文本数据库的搜索方法
2006/10/09 PHP
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
JavaScript游戏之优化篇
2010/11/08 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
Python lambda和Python def区别分析
2014/11/30 Python
Python实现获取某天是某个月中的第几周
2015/02/11 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
python定位xpath 节点位置的方法
2019/08/27 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
编写python代码实现简单抽奖器
2020/10/20 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
经理管理专业毕业自荐书范文
2014/02/12 职场文书
个人工作能力自我评价
2015/03/05 职场文书
离婚起诉状范本
2015/05/19 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
详解MySQL的内连接和外连接
2023/05/08 MySQL