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与JSon实现的无刷新分页代码
Sep 13 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
Sep 13 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
Sep 10 Javascript
js实现可拖动DIV的方法
Dec 17 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
Jan 31 Javascript
常用jQuery选择器总结
Jul 11 Javascript
jQuery使用cookie与json简单实现购物车功能
Apr 15 Javascript
Javascript中常用的检测方法小结
Oct 08 Javascript
react-redux中connect()方法详细解析
May 27 Javascript
在vue中获取token,并将token写进header的方法
Sep 26 Javascript
uni-app使用微信小程序云函数的步骤示例
May 22 Javascript
JavaScript this关键字的深入详解
Jan 14 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模拟HTTP认证
2006/10/09 PHP
php session 错误
2009/05/21 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
Python中常用信号signal类型实例
2018/01/25 Python
对Python 语音识别框架详解
2018/12/24 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
python super用法及原理详解
2020/01/20 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
新书发布会策划方案
2014/06/09 职场文书
诚信考试标语
2014/06/24 职场文书
工作调动申请报告
2015/05/18 职场文书
公司管理制度范本
2015/08/03 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android