Web浏览器控件:如何捕获文档事件
本文关键字:何捕获 文档 事件 浏览器 控件 Web | 更新日期: 2023-09-27 18:22:08
我正在使用WPF的WebBrowser控件加载一个简单的网页。在这个页面上,我有一个锚或按钮。我想在我的应用程序代码后面(即C#中)捕获该按钮的点击事件。
WebBrowser控件是否有方法捕获加载页面元素上的单击事件?
此外,是否可以在页面和WebBrowser之间传递事件触发的数据?以上都应该是可能的,对吗?
- 编辑:可能的解决方案:
我发现以下链接可能是一个解决方案。我还没有测试过,但值得一试。将根据我的测试结果更新此问题。
http://support.microsoft.com/kb/312777
- 链接取自:源
好的,找到答案-经过测试,有效:
- 从COM选项卡添加一个名为:Microsoft HTML对象库的引用
以下是示例代码:
您需要两个组件:WebBrowser(webBrowser1)和TextBox(textBox1)
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
webBrowser1.LoadCompleted += new LoadCompletedEventHandler(webBrowser1_LoadCompleted);
}
private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
{
mshtml.HTMLDocument doc;
doc = (mshtml.HTMLDocument)webBrowser1.Document;
mshtml.HTMLDocumentEvents2_Event iEvent;
iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;
iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
}
private bool ClickEventHandler(mshtml.IHTMLEventObj e)
{
textBox1.Text = "Item Clicked";
return true;
}
}
这里是另一个例子。
我试图注入一个远程javascript文件,并在准备好后通过向头中添加DOM元素<script src="{path to remote file}" />
来执行一些代码,这与jQuery.getScript(url,callback)的想法基本相同。。
下面的代码运行良好。
HtmlElementCollection head = browser.Document.GetElementsByTagName("head");
if (head != null)
{
HtmlElement scriptEl = browser.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.src = url;
element.type = "text/javascript";
head[0].AppendChild(scriptEl);
// Listen for readyState changes
((mshtml.HTMLScriptEvents2_Event)element).onreadystatechange += delegate
{
if (element.readyState == "complete" || element.readyState == "loaded")
{
Callback.execute(callbackId);
}
};
}