Как вызвать и передать аргументы методу JavaScript на странице, размещенной элементом управления .NET WebBrowser на C #?

Я хочу вызвать функцию JavaScript через C #, используя элемент управления WinForm WebBrowser. Я попытался выполнить поиск, но не смог найти ничего, что отвечало бы на мой вопрос, только решения, в которых использовался ASP.NET.

Заранее спасибо.


Редактировать:

Это единственный вопрос по этому поводу, который, как я обнаружил, действительно имеет ответ, демонстрирующий, как вызвать метод JavaScript с параметрами, а также показывает, как вызвать функцию .NET из JavaScript в элементе управления WebBrowser.

Я не думаю, что этот вопрос следует отмечать как дублирующий, так как он добавляет полезности. Это первое попадание в поиск Google по запросу "c# webbrowser call javascript function with parameters".


person seven_swodniw    schedule 27.03.2012    source источник


Ответы (1)


Это хороший пример, который я нашел здесь:

http://www.codeproject.com/Tips/127356/Calling-JavaScript-function-from-WinForms-and-vice

HTML / JavaScript

<html>
     <head>
          <script type="text/javascript">
              function ShowMessage(message) {
                  alert(message);
              }
              function ShowWinFormsMessage() {
                  var msg = document.getElementById('txtMessage').value;
                  return window.external.ShowMessage(msg);
              }
          </script>
     </head>
     <body>
          <input type="text" id="txtMessage" />
          <input type="button" value="Show Message" onclick="ShowWinFormsMessage()" />
     </body>
</html>

C#

public partial class frmMain : Form {
    public frmMain() {
        InitializeComponent();
        webBrowser1.ObjectForScripting = new ScriptManager(this);
    }
    private void btnShowMessage_Click(object sender, EventArgs e) {
        object[] o = new object[1];
        o[0]=txtMessage.Text;
        object result = this.webBrowser1.Document.InvokeScript("ShowMessage", o);
    }
    private void frmMain_Load(object sender, EventArgs e) {
        this.webBrowser1.Navigate(@"E:\Projects\2010\WebBrowserJavaScriptExample\WebBrowserJavaScriptExample\TestPage.htm");
    }

    [ComVisible(true)]
    public class ScriptManager {
        frmMain _form;
        public ScriptManager(frmMain form) {
            _form = form;
        }
        public void ShowMessage(object obj) {
            MessageBox.Show(obj.ToString());
        }
    }
}
person themhz    schedule 27.03.2012
comment
Большое спасибо. Этот ответ включает в себя, как вызвать функцию javascript, передавая ей параметры, тогда как ваша первая в комментарии не сделала этого. Не могли бы вы написать вопрос? - person seven_swodniw; 27.03.2012
comment
Если вы хотите передавать объекты, а не строки, используйте динамический: social.msdn.microsoft.com/Forums/vstudio/en-US/ - person David Wilton; 08.02.2017