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 Window及document对象详细整理
Jan 12 Javascript
js字符编码函数区别分析
Dec 28 Javascript
jquery如何判断某元素是否具备指定的样式
Nov 05 Javascript
javascript使用定时函数实现跳转到某个页面
Dec 25 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
Oct 17 Javascript
js动态切换图片的方法
Jan 20 Javascript
Angularjs分页查询的实现
Feb 24 Javascript
JQuery选中select组件被选中的值方法
Mar 08 jQuery
react实现换肤功能的示例代码
Aug 14 Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
Nov 19 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
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
python的id()函数介绍
2013/02/10 Python
python实现删除文件与目录的方法
2014/11/10 Python
Python文件去除注释的方法
2015/05/25 Python
python字符串对其居中显示的方法
2015/07/11 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Python目录和文件处理总结详解
2019/09/02 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
总裁岗位职责
2013/12/04 职场文书
2014年元旦活动方案
2014/02/15 职场文书
小学教师师德整改措施
2014/09/29 职场文书
护理实习生带教计划
2015/01/16 职场文书
家长会主持词开场白
2015/05/29 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA