如何从托管 WebBrowser 控件的应用程序调用 WebBrowser 控件查看的页面中的 JavaScript 函数?

Posted

技术标签:

【中文标题】如何从托管 WebBrowser 控件的应用程序调用 WebBrowser 控件查看的页面中的 JavaScript 函数?【英文标题】:How might I call a JavaScript Function in a Page Viewed by a WebBrowser Control from the Application Hosting the WebBrowser Control? 【发布时间】:2010-11-05 13:31:24 【问题描述】:

我创建了一个 C# 桌面应用程序,它依赖于网络爬虫的想法。

我使用 Web 浏览器控件创建了我的应用程序,以打开网站并以编程方式登录并重定向到具有网格视图的特定页面,其中包含我想要收集的所有用户数据...

但是这里的问题是,gridview 中的用户名点击由 javascript 函数触发。我知道它的名字,但不知道如何在桌面应用程序中调用它。

允许我这样做的命名空间或 DLL 是什么?

【问题讨论】:

【参考方案1】:

我认为这应该可以帮助您:

http://www.west-wind.com/WebLog/posts/493536.aspx

编辑:基于该链接,这里有一个小示例应用程序。将 Button 和 WebBrowser 控件添加到 Windows 窗体并添加以下代码:

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();
            this.webBrowser1.DocumentText = @"<html>
<body>
<script type = ""text/javascript"">
function ShowMessage(text) 
   alert(text);

</script>
</body>
<input type=""button"" onclick=""ShowMessage('From JavaScript')"" value=""Click me""/>
</html>";
        

        private void button1_Click(object sender, EventArgs e)
        
            this.webBrowser1.Document.InvokeScript("ShowMessage",new object[]"From C#");
        
    

如果您在浏览器中单击按钮,它将显示 javascript 消息,如果您单击 Windows 窗体中的按钮,它将显示 C# 消息。

【讨论】:

【参考方案2】:

您是否想过只使用以下内容在使用WebBrowser 控件的页面上运行脚本?

' In VB - but easy to convert to C# as its pretty much the same thing :).
Dim sScript As String, sLanguage As String
sLanguage = "JScript"
sScript = "MyJavaScriptToRun();" ' you can run many lines by delimiting them with ;

WebBrowser1.Document.parentWindow.execScript sScript, sLanguage

让我知道你们相处得如何。在WebBrowser 控件的.NET 版本中,还有其他方法可以运行脚本,我认为有一个.RunScript 类型的方法(不记得确切的名称,但是一旦您在智能感知中看到它就会注意到它)。

如果您还有其他问题,请告诉我。

【讨论】:

那你能用C#吗?你甚至知道 C# 吗? @xiaomao 上面的代码看不懂吗?唯一的区别是 Dim 是 sScript 和 sLanguage 的声明,其余的和 C# 一样,只要放一个 ;在每一行的末尾。您需要帮助解释上述内容吗?

以上是关于如何从托管 WebBrowser 控件的应用程序调用 WebBrowser 控件查看的页面中的 JavaScript 函数?的主要内容,如果未能解决你的问题,请参考以下文章

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

C# WebBrowser控件使用整理

WebBrowser 控件不呈现某些页面

如何从 webBrowser 控件中的当前选定选项中获取 innerText

如何从 WebBrowser 控件获取 XML (RAW/SOURCE)

创建属于自己的浏览器