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中如何处理引号编码&amp;#034;
Aug 15 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
js键盘上下左右键怎么触发function(实例讲解)
Dec 14 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
jQuery中extend函数详解
Jul 13 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
Vue $emit $refs子父组件间方法的调用实例
Sep 12 Javascript
前端面试知识点目录一览
Apr 15 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 Javascript
vue 实现tab切换保持数据状态
Jul 21 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 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
基于mysql的论坛(1)
2006/10/09 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
React实现全选功能
2020/08/25 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python列表切片用法示例
2017/04/19 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Python小进度条显示代码
2019/03/05 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
python退出循环的方法
2020/06/18 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
网吧收银员岗位职责
2013/12/14 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
护士自我鉴定总结
2014/03/24 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
小学生安全保证书
2015/05/09 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
python turtle绘图
2022/05/04 Python