据我所知,我们可以从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>
引起我兴趣的问题是
答案 0 :(得分:0)
我想知道为什么这么长时间没人回答。您所有问题的答案是COM-组件对象模型。
Windows正在提供(使用COM)来自一个程序(exe)的类和函数的功能,以便可以在exe外部进行访问。
所以
1)为什么对于需要将其对象用作objectForScripting的类,需要ComVisible为true?
->这告诉Windows使该类及其方法对Web浏览器可见。
2)Javascript对象window.external如何具有与objectForScripting中相同的方法?
-> javascript正在调用在以上答案中可见的类的方法。
3)他们如何处理跨语言类型转换?
-> COM在内部处理类型,因此可以从另一种编程语言调用一种编程语言中的方法。