• 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后可能会有深好理解
  • 相关阅读:
    WPF、UWP以及其他类型项目的csproj文件的迁移(SDK-Style)
    文书生成笔录预设保存按钮Mq中间转传服务
    卷宗添加争议焦点数据制造脚本(卷宗部分)
    案件信息同步之后,文书系统案件名称显示不正确问题
    DISTINCT----mysql移除返回的重复值
    Nginx系列教程(6)Nginx location 匹配规则详细解说
    转载 chrony 详解
    dmesg 时间转换
    axios---get和post用法详解
    通过递归来封装sessionStorage---set/get/delete
  • 原文地址:https://www.cnblogs.com/kevinWu7/p/10163541.html
Copyright © 2020-2023  润新知