博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#和JS交互 WebBrowser实例
阅读量:6492 次
发布时间:2019-06-24

本文共 1905 字,大约阅读时间需要 6 分钟。

  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后可能会有深好理解

转载于:https://www.cnblogs.com/kevinWu7/p/10163541.html

你可能感兴趣的文章
CCF201403-1 相反数(100分)
查看>>
表单通过连接数据库数据进行验证
查看>>
redis hash操作 list列表操作
查看>>
利用Hibernate 框架,实现对数据库的增删改查
查看>>
mysql开启远程连接权限
查看>>
关于商米D1S,USB默认权限在关机后丢失的FAQ
查看>>
css3 text-transform变形动画
查看>>
scikit-learn中文api
查看>>
一个完整的大作业--广州市社会保障(市民)卡服务网
查看>>
迭代器和生成器
查看>>
STM32 内存管理实验
查看>>
python注释、脚本参数、字节码
查看>>
Vue 组件之间传值
查看>>
使用pupperlabs yum repo
查看>>
指向方法之委托(一)
查看>>
成员变量和局部变量的区别
查看>>
2013 Multi-University Training Contest 3 部分解题报告
查看>>
OCA读书笔记(6) - 配置Oracle网络环境
查看>>
图像质量的评价
查看>>
Linux 网桥配置命令:brctl
查看>>