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 相关文章推荐
JavaScript While 循环基础教程
Apr 05 Javascript
jquery实现仿新浪微博评论滚动效果
Aug 06 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 Javascript
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
jQuery实现手势解锁密码特效
Aug 14 jQuery
利用JS制作万年历的方法
Aug 16 Javascript
js 获取json数组里面数组的长度实例
Oct 31 Javascript
vue2.0使用swiper组件实现轮播的示例代码
Mar 03 Javascript
react 实现页面代码分割、按需加载的方法
Apr 03 Javascript
vue自定义全局共用函数详解
Sep 18 Javascript
小程序实现图片移动缩放效果
May 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
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
php curl_init函数用法
2014/01/31 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
js 单引号 传递方法
2009/06/22 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
解释i节点在文件系统中的作用
2013/11/26 面试题
2014年三万活动总结
2014/04/26 职场文书
开学典礼演讲稿
2014/05/23 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
长城的导游词
2015/01/30 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书