Javascript:调用C#函数

R.V*_*tor 1 .net javascript c# browser connection

首先,我搜索了很多,所有主题似乎都是C#:调用或调用JavaScript函数,但我想反过来,我想在C#和JavaScript上创建一个函数,我希望JavaScript函数调用C#函数并检索它的数据,这似乎是一个很好的问题.问题是我不知道网络,我不知道它是如何工作的,但我尝试了一个样本:

创建了一个类:

public interface IFoo
{
    string Bar { get; set; }
}

public class Foo : IFoo
{
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    public IFoo CreateFoo()
    {
        return new Foo() { Bar = "somevalue" };
    }

    public string Bar(IFoo foo)
    {
        return foo.Bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

和Javascript代码:

<script type="text/javascript" language="javascript" >

function Callme(){
alert('Js function start . keep pressing OK')
var foo = external.CreateFoo();
alert(foo.Bar);
foo.Bar = "qwer";
alert(external.Bar(foo));
}
</script>
Run Code Online (Sandbox Code Playgroud)

我从webbrowser控件获得错误:

Error : "external" is null or not an object
Run Code Online (Sandbox Code Playgroud)

但是javascript没有显示任何内容,如果我错过了什么,请指导我.

Kev*_*ang 6

抓住伙计们.暂停.所有人都需要放慢速度并阅读.正如这家伙说的那样:

 I get Error from the webbrowser control :
Run Code Online (Sandbox Code Playgroud)

这意味着他正在嵌入一个webbrowser控件,打开这个运行javascript的页面.

为了澄清这一点,我认为他的意思是:

  1. 这不在线.
  2. 他在他的C#应用​​程序中有一个webBrowserControl,它打开一个页面来运行这个javascript.
  3. 在他的应用程序中,他想使用javascript从他的应用程序中的类调用C#方法.

现在,我同意他有点模棱两可(提示,请在下次更清楚你的问题),但你们都在发布答案并超越自己.事实上,他所描述的确实是可能的,这就是你如何做到的.

现在你要在javascript中引用的对象是window.external.以下是您的javascript中的示例:

window.external.CreateFoo(); 
Run Code Online (Sandbox Code Playgroud)

调用CreateFoo().但是,在您可以执行此操作之前,必须使您的类对Webbrowser正在打开的页面可见(window.external是您正在引用的实例类).

因此,要设置window.external,当您在C#中创建webBrowser时:

webBrowser1.ObjectForScripting = this;
Run Code Online (Sandbox Code Playgroud)

总结一下:

  1. 在您的C#应用​​程序中,将Web浏览器控件的ObjectForScripting设置为您要在Javascript中引用的任何对象.
  2. 在页面上的Javascript中,您可以调用window.external.YOURMETHOD();从最初设置的ObjectForScripting类调用任何公共方法.

我希望这有助于你的情况,而其他人在阅读你的问题时会更加小心.

编辑:另外作为提醒,webBrowserControl取决于用户在他/她的计算机上安装的IE版本.因此在版本控制时要小心,javascript只会执行他/她的IE版本可以处理的程度(同样适用于样式等)

编辑编辑:您还需要添加ComVisible属性[ComVisible(true)]