有时我们在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部:
1、在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的形式供外包调用
2、在webBrowser控件中设置可被html页面调用的类即:webBrowser1.ObjectForScripting = this;前端即可通过window.external访问this对象
3、html页面调用后台方法:window.external.方法名(); 此处的window.external相当于webBrowser1.ObjectForScripting
一、后台代码:
[csharp]
view plain
copy
print?
- namespace jsInWebBrowserCallCSharpMethod
- {
- [ComVisible(true)] //1、必须设置且为true,否则设置webBrowser1.ObjectForScripting对象时会报错
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- webBrowser1.Url = new Uri(Application.StartupPath + "\\htmls\\test.html");
- webBrowser1.ObjectForScripting = this;//2、设置js中window.external对象代表的类
- }
- /// <summary>
- /// 供webBrowser页面中js调用的方法
- /// </summary>
- /// <param name="mess"></param>
- public void ShowMessage(string mess)
- {
- MessageBox.Show(mess);
- }
- }
- }
namespace jsInWebBrowserCallCSharpMethod
{
[ComVisible(true)] //1、必须设置且为true,否则设置webBrowser1.ObjectForScripting对象时会报错
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webBrowser1.Url = new Uri(Application.StartupPath + "\\htmls\\test.html");
webBrowser1.ObjectForScripting = this;//2、设置js中window.external对象代表的类
}
/// <summary>
/// 供webBrowser页面中js调用的方法
/// </summary>
/// <param name="mess"></param>
public void ShowMessage(string mess)
{
MessageBox.Show(mess);
}
}
}
二、前端test.html代码:
[csharp]
view plain
copy
print?
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>测试调用winform后台方法页面</title>
- <script type="text/javascript">
- window.onload=function(){
- var btn=document.getElementById('btnCallCSharpMethod');
- btn.onclick=function(){
- window.external.ShowMessage('成功调用winform类中的方法!');//3、此处window.external相当于winform中设置的webBrowser.ObjectForScripting对象
- }
- }
- </script>
- </head>
- <body style='text-align:center;'>
- <input type='button' id='btnCallCSharpMethod' value='调用winform类中的方法' />
- </body>
- </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>测试调用winform后台方法页面</title>
<script type="text/javascript">
window.onload=function(){
var btn=document.getElementById('btnCallCSharpMethod');
btn.onclick=function(){
window.external.ShowMessage('成功调用winform类中的方法!');//3、此处window.external相当于winform中设置的webBrowser.ObjectForScripting对象
}
}
</script>
</head>
<body style='text-align:center;'>
<input type='button' id='btnCallCSharpMethod' value='调用winform类中的方法' />
</body>
</html>
按照上面1,2,3点操作,就能实现html页面调用winform 后台方法了。源码点击打开链接下载。