有时我们在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?

  1. namespace jsInWebBrowserCallCSharpMethod  
  2. {  
  3.     [ComVisible(true)] //1、必须设置且为true,否则设置webBrowser1.ObjectForScripting对象时会报错  
  4.     public partial class Form1 : Form  
  5.     {  
  6.         public Form1()  
  7.         {  
  8.             InitializeComponent();  
  9.             webBrowser1.Url = new Uri(Application.StartupPath + "\\htmls\\test.html");  
  10.             webBrowser1.ObjectForScripting = this;//2、设置js中window.external对象代表的类  
  11.         }  
  12.         /// <summary>  
  13.         /// 供webBrowser页面中js调用的方法  
  14.         /// </summary>  
  15.         /// <param name="mess"></param>  
  16.         public void ShowMessage(string mess)  
  17.         {  
  18.             MessageBox.Show(mess);  
  19.         }  
  20.   
  21.     }  
  22. }  

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?

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4.     <title>测试调用winform后台方法页面</title>  
  5.       
  6.     <script type="text/javascript">  
  7.           
  8.        window.onload=function(){  
  9.   
  10. var btn=document.getElementById('btnCallCSharpMethod');  
  11. btn.onclick=function(){  
  12.   
  13. window.external.ShowMessage('成功调用winform类中的方法!');//3、此处window.external相当于winform中设置的webBrowser.ObjectForScripting对象  
  14.   
  15. }  
  16.   
  17. }  
  18.     </script>  
  19.   
  20. </head>  
  21. <body style='text-align:center;'>  
  22.    <input type='button' id='btnCallCSharpMethod' value='调用winform类中的方法' />  
  23. </body>  
  24. </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 后台方法了。源码点击打开链接下载。

 

来自: http://blog.csdn.net/taoerchun/article/details/49782739

C# winForm webBrowser页面中js调用winForm类方法(转)的更多相关文章

  1. [Winform-WebBrowser]-在html页面中js调用winForm类方法

    在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部: 1.在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的 ...

  2. jQuery 互相调用iframe页面中js的方法

    1,子iframe内调用父类函数方法: window.parent.func(); 2,子Iframe中获取父界面的元素: $("#xx", window.parent.docum ...

  3. C#后台程序与HTML页面中JS方法互调(功能类似于Ajax中的DWR)

    此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...

  4. C#后台程序与HTML页面中JS方法互调

    此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...

  5. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  6. CEF3中js调用delphi内部方法

    2015-01-20修改:以下方法不适合delphi7,在CEF3源码中限制了delphi_14 up,对于被我误导的朋友说声抱歉 在CEF1中JS调用delphi的方法已经贴过:http://www ...

  7. [C#学习]在多线程中如何调用Winform[转]

    问题的产生: 我的WinForm程序中有一个用于更新主窗口的工作线程(worker thread),但文档中却提示我不能在多线程中调用这个form(为什么?),而事实上我在调用时程序常常会崩掉.请问如 ...

  8. aspx 页面中 js 引用与页面后台的数据交互 --【 后台调用 js 】

    js 中调用后台方法   一.用Response.Write方法 Response.Write("<script type='text/javascript'>alert(&qu ...

  9. .NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

随机推荐

  1. Cocos2d-x 3.0游戏开发之虚拟机IOS环境:匹配才是好,莫要随便升级软件

    尊重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/34110449 做为一个买不起MAC的Coder,仅 ...

  2. 关于curl: (2) Failed Initialization

    一開始是由于curl无法訪问https网上说,要又一次编译安装curl 我就下载.. ./configure make make install 结果出现 curl: (2) Failed Initi ...

  3. Matlab 7.1安装及打不开问题解决

    一.安装方法   1.解压[MATLAB.V7.1.Windows版本号].MATLAB.V7.1.R14.SP3.CD1.iso,双击setup进行安装,输入username,单位,找到crac ...

  4. delphi 隐藏标题栏

      1.隐藏窗体的标题栏在Delphi中隐藏窗体的标题栏,相信大家都会说是一个件十分容易的事情,只需要设置BorderStyle的属性为bsNone就可以了,不过这种设置方法不但去掉了窗体的标题栏,而 ...

  5. WebLogic使用总结(四)——WebLogic部署Web应用

    一.打包Web应用 首先将要部署到WebLogic的Web应用打包成war包,具体操作步骤如下图所示: 选中要打包的[oams]项目→[Export...]

  6. 在busybox里使用ulimit命令

    刚才想使用ulimit修改用户进程的用户栈的大小,发现busybox里没有这个命令,上google搜索得到如下解释: "ulimit" is a shell builtin, me ...

  7. sql语句练习题

    6.Mysql不要用top用limit 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢? 查找时Mysql不能用top,反正我用不了,查了下可以用limit来替换. 比 ...

  8. tomcat内存溢出设置JAVA_OPTS

     答案1设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置三.实例,以 ...

  9. Android Socket通信详解

    一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客 ...

  10. AndroidStudio工具将Module项目导出成Jar和arr库

    原文:http://blog.csdn.net/liulei823581722/article/details/52919697 该篇首先讲述利用AndroidStudio如何把一个module项目导 ...