使用WebBrowser控件与网页通信,互相调用

转自:使用WebBrowser控件与网页通信,互相调用

本例程序运行效果图如下所示:

C#与Javascript互相调用效果图

WebBrowser控件之所有强大,一方面是由于控件本身提从了一系列的方法,包括打开网页,获取网页信息,操作网页(如前进后通等),拦截网页事件,另一方面则是提供了与网页相调用的机制。即以下2点:
1:让HTML页面的js调用我们在WebBrowser控件外面编写的函数。
2:让我们可以调用网页中的Javascript代码

   如果能够让网页里的Javascript与我们用C#编写的函数互相调用,则理论上,以后的界面都可以交给Webbrowser来处理。这样就解决了一直以来,困扰我们的问题:弱客户端与胖客户端的问题。众所周知,网页程序的优势在于界面开发容易,几行HTML就可以做出惊人的效果,而且更新方便。只需要在服务器端更新,则所有用户都可以立即用上最新的版本。但网页程序由于运行在浏览器里,所以网页不能实现本地计算(其实Javascript也是本地计算,只是效率太低),不能访问本地资源。比如本地文件系统,直接查看网络设备,直接与素统交互,这导致了网页功能的局限性。通过将2者结合,各自做自己擅长的工作,就能解决这一矛盾。Webbrowser控件就是这解这一问题的桥梁。

   Javascript与C#两种不同的语言互相调用与通信,依靠的是与语言无关的COM技术(WebBrowser使用了这一技术,实现了相关接口,打通了这2者的桥梁)。所以,我们需要让我们的C#代码类成为一个COM类,只需要在类前面定义一个ComVisibleAttribute属性即可,如下所示:

1
2
3
4
5
6
7
8
9
10
11
[System.Runtime.InteropServices.ComVisibleAttribute( true )]
public partial class MainForm : Form
{
     public MainForm()
     {
         InitializeComponent();
     }
 
     //some other function....
 
}
   在我们的C#类变成一个COM类以后,我们还要告诉WebBrowser,让这个类做为Javascript调用的入口类,即指定ObjectForScripting 属性,代码如下所示
1
2
//set this to be the COM handler
this .webBrowser1.ObjectForScripting = this ;

关于ObjectForScripting,更详细的信息可以参考这里:http://msdn2.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx

做了这些准备工作以后,就可以直接使用WebBrowser控件的Document属性的InvokeScript方法来执行Html中的Javascript代码了。

本例使用到的Javascript代码为:

1
2
3
4
5
6
7
8
9
10
function callFromCSharp(){
     var obj = document.getElementById( 'testid' );
     if (obj != null ){
         obj.value = "called from c#" ;
     }
}
 
function callToCSharp(){
     window.external.CallFromWeb( "Really?" )
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值