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

Posted

技术标签:

【中文标题】如何在 C# 中由 .NET WebBrowser 控件托管的页面中调用 JavaScript 方法并将参数传递给 JavaScript 方法? [复制]【英文标题】:How to call and pass arguments to a JavaScript method in a page hosted by the .NET WebBrowser control in C#? [duplicate] 【发布时间】:2012-04-11 05:50:41 【问题描述】:

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

提前谢谢你。


编辑:

这是我发现的唯一一个与此相关的问题,它实际上有一个答案,该答案演示了如何使用参数调用 JavaScript 方法,还显示了如何从 WebBrowser 控件中的 JavaScript 调用 .NET 函数。

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

【问题讨论】:

【参考方案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());
        
    

【讨论】:

非常感谢。这个答案包括如何调用一个javascript函数向它传递参数,而你在评论中的第一个没有。你应该聪明地发布一个问题吗? 如果你想传递对象而不是字符串使用动态:social.msdn.microsoft.com/Forums/vstudio/en-US/…

以上是关于如何在 C# 中由 .NET WebBrowser 控件托管的页面中调用 JavaScript 方法并将参数传递给 JavaScript 方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C# .NET WebBrowser.Document GetElementById获取不到指定ID

C#中webbrowser怎么禁用默认调用的IE浏览器缩放功能

我如何在 webBrowser 中使用 c# 执行点击事件

从.net(C#)中的Webbrowser控件中检索选定的文本

如何在 C# 中使用 WebBrowser 控件清除浏览历史记录

如何在 C# 中更新 WebBrowser 控件中的 DOM 内容?