• C# winForm webBrowser页面中js调用winForm类方法(转)


     

    有时我们在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部:

     

    1、在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的形式供外包调用

    2、在webBrowser控件中设置可被html页面调用的类即:webBrowser1.ObjectForScripting = this;前端即可通过window.external访问this对象

    3html页面调用后台方法:window.external.方法名(); 此处的window.external相当于webBrowser1.ObjectForScripting

     

    一、后台代码:

    [csharp] view plain copy print?

    1. namespace jsInWebBrowserCallCSharpMethod  
    2. {  
    3.     [ComVisible(true)] //1、必须设置且为true,否则设置webBrowser1.ObjectForScripting对象时会报错  
    4.     public partial class Form1 : Form  
    5.     {  
    6.         public Form1()  
    7.         {  
    8.             InitializeComponent();  
    9.             webBrowser1.Url = new Uri(Application.StartupPath + "\htmls\test.html");  
    10.             webBrowser1.ObjectForScripting = this;//2、设置jswindow.external对象代表的类  
    11.         }  
    12.         /// <summary>  
    13.         /// webBrowser页面中js调用的方法  
    14.         /// </summary>  
    15.         /// <param name="mess"></param>  
    16.         public void ShowMessage(string mess)  
    17.         {  
    18.             MessageBox.Show(mess);  
    19.         }  
    20.   
    21.     }  
    22. }  

    namespace jsInWebBrowserCallCSharpMethod

    {

    [ComVisible(true)] //1、必须设置且为true,否则设置webBrowser1.ObjectForScripting对象时会报错

    public partial class Form1 : Form

    {

    public Form1()

    {

    InitializeComponent();

    webBrowser1.Url = new Uri(Application.StartupPath + "\htmls\test.html");

    webBrowser1.ObjectForScripting = this;//2、设置jswindow.external对象代表的类

    }

    /// <summary>

    /// webBrowser页面中js调用的方法

    /// </summary>

    /// <param name="mess"></param>

    public void ShowMessage(string mess)

    {

    MessageBox.Show(mess);

    }

     

    }

    }

     

    二、前端test.html代码:

    [csharp] view plain copy print?

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    2. <html xmlns="http://www.w3.org/1999/xhtml">  
    3. <head>  
    4.     <title>测试调用winform后台方法页面</title>  
    5.       
    6.     <script type="text/javascript">  
    7.           
    8.        window.onload=function(){  
    9.   
    10. var btn=document.getElementById('btnCallCSharpMethod');  
    11. btn.onclick=function(){  
    12.   
    13. window.external.ShowMessage('成功调用winform类中的方法!');//3、此处window.external相当于winform中设置的webBrowser.ObjectForScripting对象  
    14.   
    15. }  
    16.   
    17. }  
    18.     </script>  
    19.   
    20. </head>  
    21. <body style='text-align:center;'>  
    22.    <input type='button' id='btnCallCSharpMethod' value='调用winform类中的方法' />  
    23. </body>  
    24. </html>  

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>

    <title>测试调用winform后台方法页面</title>

     

    <script type="text/javascript">

     

    window.onload=function(){

     

    var btn=document.getElementById('btnCallCSharpMethod');

    btn.onclick=function(){

     

    window.external.ShowMessage('成功调用winform类中的方法!');//3、此处window.external相当于winform中设置的webBrowser.ObjectForScripting对象

     

    }

     

    }

    </script>

     

    </head>

    <body style='text-align:center;'>

    <input type='button' id='btnCallCSharpMethod' value='调用winform类中的方法' />

    </body>

    </html>

     


    按照上面1,2,3点操作,就能实现html页面调用winform 后台方法了。源码点击打开链接下载。

     

    来自: http://blog.csdn.net/taoerchun/article/details/49782739

  • 相关阅读:
    Unity UGUI基础之Text
    Unity UGUI之Canvas&EventSystem
    ROS(indigo)国外开源示例包括多机器人控制等基于V-Rep和Gazebo的仿真
    lk中内联调用的dsb()
    svn 回退/更新/取消至某个版本命令详解
    ubuntu16.04中可以用于教学的有趣的应用
    高级UI晋升之布局ViewGroup(四)
    高级UI晋升之常用View(三)下篇
    高级UI晋升之常用View(三)中篇
    高级UI晋升之常用View(三)上篇
  • 原文地址:https://www.cnblogs.com/time-is-life/p/7479061.html
Copyright © 2020-2023  润新知