Как обрабатывать события JavaScript с помощью элемента управления WebBrowser для WinForms - PullRequest
17 голосов
/ 02 марта 2011

Я прочитал Управление WebBrowser из .Net - Как внедрить Javascript , Можно ли вызвать метод Javascript из c # winforms и многих других. Такими примерами были возвращаемое значение функции или окно предупреждения (синхронные вызовы). Я должен получить результат от обработчика событий (асинхронный вызов):

<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>

Ответы [ 3 ]

32 голосов
/ 25 марта 2011

Вызов C # из JavaScript

Проще говоря, вы можете предоставить объект C # веб-браузеру, который JavaScript может вызывать напрямую. Класс WebBrowser предоставляет свойство 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();

Вызов JavaScript в элементе управления WebBrowser из C #

1 голос
/ 02 марта 2011

Это код, который у меня есть.В событии 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);

, которая затем может быть вызвана.Это то, что я сделал.

0 голосов
/ 24 мая 2015

Если ваш элемент управления 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();
    }
}
...