.net中的WebBrowser控件如何处理ObjectForScripting

How WebBrowser control in .net handles ObjectForScripting

本文关键字:处理 ObjectForScripting 何处理 中的 WebBrowser 控件 net      更新时间:2023-09-26

据我所知,我们可以从Javascript中调用C#函数,该函数加载在WebBrowser控件中,下面的代码显示了我通常是如何执行的。

Form1.cs

public partial class Form1 : Form{
        private WebBrowser webBrowser1;
            public ApplicationWindow(){
               InitializeComponent();
                WebBrowser webBrowser1 = new WebBrowser();
                //some code follows
                webBrowser1.ObjectForScripting = new ScriptManager();
                this.webBrowser1.Url = new Uri("file:///d:/ui/application.html");
            }
        }
    }

ScriptManager.cs

namespace WindowsFormsApplication10 {
        [ComVisible(true)]
        public class ScriptManager{
            public string GetAllDomains(){
                string result=null;
                //does something;
                return result;
            }
        } 
    }

application.html

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <script>
       $(document).ready(function () {
          var result = window.external.GetAllDomains();
          //it works but this is what puzzles me. 
       });
    </script>

吸引我的问题是

  1. 为什么我们需要ComVisible对于我们将要用作objectForScripting的对象的类为true
  2. Javascript对象window.external如何具有与objectForScripting中相同的方法
  3. 他们如何处理跨语言类型转换

我想知道为什么这么长时间没有人回答。所有问题的答案都是COM组件对象模型。

Windows(使用COM)为一个程序(exe)中的类和函数提供了在exe之外可访问的功能。

所以

1) 为什么我们需要ComVisible对于我们将要用作objectForScripting的对象的类为true?

->这个命令告诉windows使类及其方法对web浏览器可见。

2) Javascript对象window.external如何具有与objectForScripting中相同的方法?

->javascript正在调用在上面的答案中可见的类的方法。

3) 他们如何处理跨语言类型转换?

->COM在内部处理这些类型,因此可以从另一种编程语言调用一种程序语言中的方法。