我已阅读WebBrowser Control from .Net — How to Inject Javascript,Is it possible to call Javascript method from c# winforms和其他许多人。这些示例是返回函数值或警报窗口(同步调用)。我必须从事件处理程序(asyn调用)获得结果:
<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>
答案 0 :(得分:32)
从JavaScript调用C#
简单地说,您可以公开C#对象 到了WebBrowser那个JavaScript 可以直接调用WebBrowser class公开了一个名为的属性 可以设置的ObjectForScripting 你的申请并成为 window.external对象 JavaScript的。对象必须有 ComVisibleAttribute设置为true
C#:
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class ScriptInterface
{
public void callMe()
{
… // Do something interesting
}
}
webBrowser1.ObjectForScripting = new ScriptInterface();
使用Javascript:
window.external.callMe();
答案 1 :(得分:1)
这是我的代码。在DocumentCompleted事件中(因为我从在线获取页面)
var wb = (WebBrowser)sender
//Lots of other stuff
object obj = wb.Document.InvokeScript("MyFunctionName");
创建一个函数,返回您需要的任何值并调用。
您还可以将脚本注入页面
string js = "function MyFunctionName(){alert('Yea!');}";
HtmlElement el = wb.Document.CreateElement("script");
IHTMLScriptElement element2 = (IHTMLScriptElement)el.DomElement;
element2.text = js;
head.AppendChild(el);
然后可以调用。这就是我所做的。
答案 2 :(得分:0)
如果您的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();
}
}