最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c# - Web browser control: How to capture document events? - Stack Overflow

programmeradmin0浏览0评论

I am using WPF's WebBrowser control to load a simple web page. On this page I have an anchor or a button. I want to capture the click event of that button in my application's code behind (i.e. in C#).

Is there are a way for the WebBrowser control to capture click events on the loaded page's elements?

In addition, is it possible to communicate event triggered data between the page and the WebBrowser? All of the above should be possible am I right?

  • Edit: Probable solution:

I have found the following link that might be a solution. I haven't tested it yet but it's worth the shot. Will update this question depending on my test results.

  • Link taken from: Source

I am using WPF's WebBrowser control to load a simple web page. On this page I have an anchor or a button. I want to capture the click event of that button in my application's code behind (i.e. in C#).

Is there are a way for the WebBrowser control to capture click events on the loaded page's elements?

In addition, is it possible to communicate event triggered data between the page and the WebBrowser? All of the above should be possible am I right?

  • Edit: Probable solution:

I have found the following link that might be a solution. I haven't tested it yet but it's worth the shot. Will update this question depending on my test results.

http://support.microsoft.com/kb/312777

  • Link taken from: Source
Share Improve this question edited May 23, 2017 at 12:18 CommunityBot 11 silver badge asked Feb 2, 2012 at 10:05 BassemBassem 3,1752 gold badges27 silver badges41 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 14

Ok Answer found - tested and it works:

  • Add a reference from the COM tab called: Microsoft HTML Object Library

The following is an example code:

You will need two components: WebBrowser (webBrowser1) and a 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;
    }
}

Here is another example.

I was trying to inject a remote javascript file and execute some code when ready by adding a DOM element <script src="{path to remote file}" /> to the header, essentially the same idea as jQuery.getScript(url, callback)..

The code below works fine.

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);
        }
    };
}
发布评论

评论列表(0)

  1. 暂无评论