如何通过WinForms的WebBrowser控件处理Javascript事件
我读过,还有很多其他的。这些示例是返回函数值或警报窗口(同步调用)。我必须从事件处理程序(异步调用)获取结果:如何通过WinForms的WebBrowser控件处理Javascript事件,javascript,winforms,webbrowser-control,dom-events,Javascript,Winforms,Webbrowser Control,Dom Events,我读过,还有很多其他的。这些示例是返回函数值或警报窗口(同步调用)。我必须从事件处理程序(异步调用)获取结果: window.onload=函数(){ var o=新的M.Build(document.getElementById(“ZID”); M.Events.observe(o,o.Events.Success,function(){ //我必须得到一些价值!! }); M.Events.observe(o,o.Events.Fault,function(){ //我必须得到一些价值!!
window.onload=函数(){
var o=新的M.Build(document.getElementById(“ZID”);
M.Events.observe(o,o.Events.Success,function(){
//我必须得到一些价值!!
});
M.Events.observe(o,o.Events.Fault,function(){
//我必须得到一些价值!!
});
}
这是我的代码。在DocumentCompleted事件中('因为我从联机获取页面)
创建一个函数,返回您需要的任何值并调用它
您还可以向页面中插入脚本
string js = "function MyFunctionName(){alert('Yea!');}";
HtmlElement el = wb.Document.CreateElement("script");
IHTMLScriptElement element2 = (IHTMLScriptElement)el.DomElement;
element2.text = js;
head.AppendChild(el);
然后可以调用它。我就是这么做的
从JavaScript调用C#
简单地说,您可以公开一个C#对象
向Web浏览器发送JavaScript
可以直接呼叫网络浏览器
类公开一个名为
可由设置的ObjectForScript
您的应用程序并成为
window.external对象在
JavaScript。对象必须具有
ComVisibleAttribute设置为true
C#:
Javascript:
window.external.callMe();
如果webBrowser控件位于表单中,则可以执行以下操作:
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class Form1
{
public Form1()
{
InitializeComponent();
webBrowser1.ObjectForScripting = this;
}
public void CallMe()
{
//.... this method can be called in javascript via window.external.CallMe();
}
}
o、 事件。将异步激发成功。这不是一个解决方案。我想你可以将你需要的值赋给一个变量,然后拥有或注入一个返回该值的函数。问题是:我应该什么时候调用这个函数。我不知道该事件何时执行(如果返回您调用的值的函数在值尚未设置时返回某种形式的标识符,则您将知道它尚未运行。如果没有某种类型的指示符,您将无法知道该函数是否已运行。我假定原因是您可以随后注入js代码以查看事件,然后让js调用back到你的c#代码。这就是我要尝试的。
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class ScriptInterface
{
public void callMe()
{
… // Do something interesting
}
}
webBrowser1.ObjectForScripting = new ScriptInterface();
window.external.callMe();
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class Form1
{
public Form1()
{
InitializeComponent();
webBrowser1.ObjectForScripting = this;
}
public void CallMe()
{
//.... this method can be called in javascript via window.external.CallMe();
}
}