c# - Javascript : call a C# function

标签 c# javascript .net connection browser

首先,我搜索了很多,所有主题似乎都是 C#:调用或调用 JavaScript 函数,但我想做相反的事情,我想在 C# 和 JavaScript 上创建一个函数,我想要 JavaScript 函数调用C# 函数并检索它的数据,这似乎是个好问题。 问题是我对网络一无所知,也不知道它是如何工作的,但我尝试了一个示例:

创建一个类:

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

public class Foo : IFoo
{
    public string Bar { get; set; }
}

然后

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

    }

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

    public string Bar(IFoo foo)
    {
        return foo.Bar;
    }
}

和 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>

我从网络浏览器控件中得到错误:

Error : "external" is null or not an object

但 javascript 没有显示任何内容,如果我遗漏了什么,请指导我。

最佳答案

等一下伙计们。 暂停。你们所有人都需要放慢阅读速度。正如这个人所说:

 I get Error from the webbrowser control :

这意味着他正在嵌入一个网络浏览器控件,该控件可以打开运行 javascript 的页面。

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

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

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

现在您要在 javascript 中引用的对象是 window.external。这是您的 javascript 中的示例:

window.external.CreateFoo(); 

调用 CreateFoo()。然而,在你这样做之前,你必须让你的类对你的网络浏览器打开的页面可见(window.external 是你引用的实例类)。

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

webBrowser1.ObjectForScripting = this;

总结一下:

  1. 在您的 C# 应用中,将您的网络浏览器控件的 ObjectForScripting 设置为您想在 Javascript 中引用的任何对象。
  2. 在您页面上的 Javascript 中,您可以调用 window.external.YOURMETHOD(); 来调用您最初设置的 ObjectForScripting 类中的任何公共(public)方法。

我希望这对您的情况有所帮助,其他人在阅读您的问题时会更加小心。

编辑:另外提醒一下,webBrowserControl 取决于用户在他/她的计算机上安装的 IE 版本。所以在版本控制上要小心,javascript 只会在他/她的 IE 版本可以处理的范围内执行(样式等也是如此)

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

关于c# - Javascript : call a C# function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9886369/

相关文章:

c# - 如何使用 c dll 从 c# 项目中读取文件?

c# - 如何在vscode中调试cake项目?

javascript - JQuery 点击功能不适用于父元素中的按钮,它有自己的点击功能

javascript - Google Chrome 中的 CSS3 径向渐变渲染

c# - 必须处理哪些变量? (.NET/ java )

c# - 生成大文档后 IIS 内存使用不会恢复正常

c# - 不获取返回值和获取并丢弃返回值在性能上有区别吗?

javascript - 如何等待多个异步函数完成?

.net - 为什么需要 XmlNamespaceManager?

c# - 如何在 Silverlight 中创建客户端帮助程序类?