zoukankan      html  css  js  c++  java
  • 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后可能会有深好理解
  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163541.html
Copyright © 2011-2022 走看看