首先,我搜索了很多,所有主题似乎都是 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 的页面。
为了澄清这一点,我认为他的意思是:
- 这不是在线的。
- 他的 C# 应用程序中有一个 webBrowserControl,可以打开一个页面来运行此 javascript。
- 在他的应用中,他想使用 javascript 从他的应用中的类调用 C# 方法。
现在,我同意他有点模棱两可(提示,下次请更清楚地提出您的问题),但你们都在张贴答案并超越自己。事实上他所描述的确实是可能的,这就是你如何做到的。
现在您要在 javascript 中引用的对象是 window.external。这是您的 javascript 中的示例:
window.external.CreateFoo();
调用 CreateFoo()。然而,在你这样做之前,你必须让你的类对你的网络浏览器打开的页面可见(window.external 是你引用的实例类)。
因此,要在 C# 中创建 webBrowser 时设置 window.external:
webBrowser1.ObjectForScripting = this;
总结一下:
- 在您的 C# 应用中,将您的网络浏览器控件的 ObjectForScripting 设置为您想在 Javascript 中引用的任何对象。
- 在您页面上的 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/