如何通过WebBrowser控件为WinForms处理javascript事件 [英] How to handle javascript events via WebBrowser control for WinForms
问题描述
我已阅读来自.Net的WebBrowser控件 - 如何注入Javascript ,是否可能从c#winforms 和其他许多人调用Javascript方法。这些示例是返回函数值或警报窗口(同步调用)。我必须从事件处理程序(asyn调用)获得结果:
I have read WebBrowser Control from .Net — How to Inject Javascript, Is it possible to call Javascript method from c# winforms and many others. Those examples were returns function value or alert window (synchronous calls). I have to get result from event handler (asyn call):
<script type="text/javascript">
window.onload = function() {
var o = new M.Build(document.getElementById("ZID"));
M.Events.observe(o, o.Events.Success, function() {
// I have to get some value!!
});
M.Events.observe(o, o.Events.Fault, function() {
// I have to get some value!!
});
}
</script>
推荐答案
从JavaScript调用C#
Calling C# from JavaScript
简单地说,你可以向WebBrowser公开一个C#对象
,即JavaScript
可以直接调用WebBrowser
类公开一个属于
ObjectForScripting的属性,可以通过
设置你的应用程序,并成为
JavaScript中的
window.external对象。该对象必须具有
ComVisibleAttribute设置为true
Simply put, you can expose a C# object to the WebBrowser that the JavaScript can call directly The WebBrowser class exposes a property called ObjectForScripting that can be set by your application and becomes the window.external object within JavaScript. The object must have the ComVisibleAttribute set true
C#:
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class ScriptInterface
{
public void callMe()
{
… // Do something interesting
}
}
webBrowser1.ObjectForScripting = new ScriptInterface();
Javascript:
Javascript:
window.external.callMe();
这篇关于如何通过WebBrowser控件为WinForms处理javascript事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!