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没有显示任何内容,如果我错过了什么,请指导我.
抓住伙计们.暂停.所有人都需要放慢速度并阅读.正如这家伙说的那样:
I get Error from the webbrowser control :
Run Code Online (Sandbox Code Playgroud)
这意味着他正在嵌入一个webbrowser控件,打开这个运行javascript的页面.
为了澄清这一点,我认为他的意思是:
现在,我同意他有点模棱两可(提示,请在下次更清楚你的问题),但你们都在发布答案并超越自己.事实上,他所描述的确实是可能的,这就是你如何做到的.
现在你要在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)
总结一下:
window.external.YOURMETHOD();从最初设置的ObjectForScripting类调用任何公共方法.我希望这有助于你的情况,而其他人在阅读你的问题时会更加小心.
编辑:另外作为提醒,webBrowserControl取决于用户在他/她的计算机上安装的IE版本.因此在版本控制时要小心,javascript只会执行他/她的IE版本可以处理的程度(同样适用于样式等)
编辑编辑:您还需要添加ComVisible属性[ComVisible(true)]
| 归档时间: |
|
| 查看次数: |
4985 次 |
| 最近记录: |