C#和JS交互 WebBrowser实例

  1. 本文实现了WebBrowser的简单例子  
  2.   
  3. 1.引用System.Windows.Froms.dll  
  4. 2.引用WindowsFormsIntegration.dll  
  5. 代码如下:   
  6. public partial class MainWindow : Window  
  7.     {  
  8.         public MainWindow()  
  9.         {  
  10.             InitializeComponent();  
  11.         }  
  12.   
  13.         private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)  
  14.         {  
  15.             Window _w = new Window();  
  16.             web_control web_c = new web_control("http://www.baidu.com");  
  17.             _w.Content = web_c;  
  18.             _w.Owner = this;  
  19.             _w.Show();  
  20.         }  
  21.     }  
  22.   
  23.     public class web_control : UserControl  
  24.     {  
  25.         public System.Windows.Forms.WebBrowser _web_browser;  
  26.         public web_control(string url)  
  27.         {  
  28.             _web_browser = new System.Windows.Forms.WebBrowser();  
  29.             _web_browser.ObjectForScripting = new external_dispath(this);      
  30.            var host = new System.Windows.Forms.Integration.WindowsFormsHost();  
  31.             host.Child = _web_browser;  
  32.             Content = host;  
  33.             Loaded += (senser, e) =>  
  34.                 {  
  35.                     _web_browser.Navigate(url);  
  36.                 };  
  37.         }  
  38.     }  
  39.   
  40.   
  41. 至此,上方实现了简单的例子(除了红色那一句之外)  
  42.   
  43. =========================================17.7.21更新以下========================================================  
  44.   
  45.    但在后来遇到要与JS交互,在webBrowser使用过程中为了C#和JS通讯,webBrowser必须设置ObjectForScripting的属性,  
  46. 它是一个object,这个object可以提供给webBrowser控件载入的网页上的script访问。(上方红色语句)  
  47.   
  48.     在设置过webBrowser控件的ObjectForScripting属性后,还需要设置应用程序对com可见,不然会抛出一个异常  
  49. (ObjectForScripting 的类必须对 COM 可见。请确认该对象是公共的,或考虑向您的类添加 ComVisible 属性。),可做如下设置:  
  50.   
  51.   [System.Runtime.InteropServices.ComVisibleAttribute(true)]  //使接口可见  
  52.     public class external_dispath  
  53.     {  
  54.         public web_control m_wbcontrol;  
  55.            
  56.         public external_dispath(web_control wb_c)  
  57.         {  
  58.             m_wbcontrol = wb_c;  
  59.         }   
  60.   
  61.         public Object createObject(String name)  
  62.         {  
  63.             return new external_dispath(m_wbcontrol);  
  64.         }  
  65.   
  66.         public void closeWebDlg()          //为了让JS调的,作用是关闭网页弹窗  
  67.         {  
  68.             (m_wbcontrol.Parent as Window).Close();  
  69.         }  
  70.         通过在c#这一层实现external类,来达到在点击网页中右上角的关闭按钮时,关闭网页的弹窗  
  71.  }  
  72.   
  73. JS代码:  
  74.   
  75.   $(".close-btn").on("click",function(  
  76.   
  77. e){                 
  78.  e.preventDefault();               
  79.    TA.log({ld:'client', id:'lhb_kx_gb'});            
  80.       try{                   
  81.    external.closeWebDlg();      //调用外部的函数  
  82.   
  83.    }catch (e){} });  
  84.   
  85. 最后疑问是external是哪里来的,JS和C#是怎么约定的,以后在学习JS后可能会有深好理解
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值