如何通过WebBrowser控件为WinForms处理javascript事件

gar*_*rik 17 javascript webbrowser-control winforms dom-events

从.Net阅读了WebBrowser控件 - 如何注入Javascript,是否可以从c#winforms和其他许多人调用Javascript方法.这些示例是返回函数值或警报窗口(同步调用).我必须从事件处理程序(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>
Run Code Online (Sandbox Code Playgroud)

gar*_*rik 33

从JavaScript调用C#

简单地说,您可以将C#对象公开给JavaScript可以直接调用的WebBrowser WebBrowser类公开一个名为ObjectForScripting的属性,该属性可以由您的应用程序设置并成为JavaScript中的window.external对象.该对象必须将ComVisibleAttribute设置为true

C#:

 [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public class ScriptInterface
    {
        public void callMe()
        {
            … // Do something interesting
        }
    }

    webBrowser1.ObjectForScripting = new ScriptInterface();
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

window.external.callMe();
Run Code Online (Sandbox Code Playgroud)

从C#调用WebBrowser控件中的JavaScript