How to handle Javascript events via WebBrowser control for WinForms

后端 未结 3 1915
粉色の甜心
粉色の甜心 2020-12-03 01:27

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 f

相关标签:
3条回答
  • 2020-12-03 02:06

    Calling C# from JavaScript

    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:

    window.external.callMe();
    

    Calling JavaScript in a WebBrowser control from C#

    0 讨论(0)
  • 2020-12-03 02:10

    This is code I have. In the DocumentCompleted event ('cause I'm getting a page from online)

    var wb = (WebBrowser)sender
    //Lots of other stuff
    object obj = wb.Document.InvokeScript("MyFunctionName");
    

    Create a function that returns whatever value you need and invoke away.

    You can also inject a script into the page

    string js = "function MyFunctionName(){alert('Yea!');}";
    HtmlElement el = wb.Document.CreateElement("script");
    IHTMLScriptElement element2 = (IHTMLScriptElement)el.DomElement;
    element2.text = js;
    head.AppendChild(el);
    

    which can then be invoked. That's what I've done.

    0 讨论(0)
  • 2020-12-03 02:23

    If your webBrowser control is in a form, you can do the following:

    [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();
        }
    }
    
    0 讨论(0)
提交回复
热议问题