正在从C#中的WebBrowser控件获取操作
本文关键字:控件 获取 操作 WebBrowser 中的 | 更新日期: 2023-09-27 18:29:29
有可能这样做吗?例如,我有一个带有WebBrowser控件的表单和包含一些元素的本地HTML页面。当用户单击网页中的按钮时,表单会执行一些操作(例如,关闭应用程序)。有没有任何方法可以将DOM操作与表单事件连接起来?如何连接?
是的,您可以使用WebBrowser.ObjectForScripting属性将要向JavaScript公开的对象设置为window.external
。然后,您可以在JavaScript中调用该对象上的方法。如果您需要首先向页面中注入一些JavaScript,以将这些东西连接到您没有编写的HTML页面中,请查看WebBrowser.DocumentCompleted
事件,在该事件中,您可以向WebBrowser.Document
中注入JavaScript,如下所示:
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
try
{
mainDoc = webBrowser.Document;
if (mainDoc != null)
{
HtmlElementCollection heads = mainDoc.GetElementsByTagName("head");
HtmlElement scriptEl = mainDoc.CreateElement("script");
IHTMLScriptElement el = (IHTMLScriptElement)scriptEl.DomElement;
el.text = "alert('hello world')";
heads[0].AppendChild(scriptEl);
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
编辑:我忽略了提到IHTMLScriptElement来自COM,您将需要以下代码:
[ComImport, ComVisible(true), Guid(@"3050f28b-98b5-11cf-bb82-00aa00bdce0b")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
[TypeLibType(TypeLibTypeFlags.FDispatchable)]
public interface IHTMLScriptElement
{
[DispId(1006)]
string text { set; [return: MarshalAs(UnmanagedType.BStr)] get; }
}