如何在由C#中的.NET WebBrowser控件托管的页面中调用JavaScript方法并将参数传递给该方法?

如何在由C#中的.NET WebBrowser控件托管的页面中调用JavaScript方法并将参数传递给该方法?,javascript,c#,webbrowser-control,Javascript,C#,Webbrowser Control,我想使用WinForm的WebBrowser控件通过C#调用JavaScript函数。我试图搜索,但找不到任何答案,只有涉及ASP.NET的解决方案 先谢谢你 编辑: 这是我发现的唯一一个关于这个问题的答案,它演示了如何使用参数调用JavaScript方法,还演示了如何从WebBrowser控件中的JavaScript调用.NET函数 我不认为这个问题应该被标记为重复,因为它增加了很好的价值。这是谷歌搜索“c#webbrowser call javascript function with p

我想使用WinForm的WebBrowser控件通过C#调用JavaScript函数。我试图搜索,但找不到任何答案,只有涉及ASP.NET的解决方案

先谢谢你


编辑: 这是我发现的唯一一个关于这个问题的答案,它演示了如何使用参数调用JavaScript方法,还演示了如何从WebBrowser控件中的JavaScript调用.NET函数


我不认为这个问题应该被标记为重复,因为它增加了很好的价值。这是谷歌搜索
“c#webbrowser call javascript function with parameters”

的第一个成功例子,我在这里找到:

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>

非常感谢。此答案包括如何调用向其传递参数的javascript函数,而您在注释中的第一个函数没有。您是否应该智能地发布问题?如果您希望传递对象而不是字符串,请使用动态:
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());
        }
    }
}