检测WebBrowser控件上的滚动事件

4
我有如下代码,奇怪的是,它在运行了几秒钟后就停止工作了(我的事件处理程序方法不再被调用):
public partial class Form1 : Form
{
    private void Form1_Load(object sender, EventArgs e)
    {
        webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
        webBrowser1.Navigate("google.com");
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (!webBrowser1.IsBusy && webBrowser1.Url == e.Url && webBrowser1.ReadyState == WebBrowserReadyState.Complete)
        {
            HTMLWindowEvents_Event windowEvents = webBrowser1.Document.Window.DomWindow as HTMLWindowEvents_Event;
            windowEvents.onscroll += new HTMLWindowEvents_onscrollEventHandler(windowEvents_onscroll);
        }
    }

    private void windowEvents_onscroll()
    {
        HtmlDocument htmlDoc = webBrowser1.Document;
        int scrollTop = htmlDoc.GetElementsByTagName("HTML")[0].ScrollTop;
        string text = scrollTop.ToString();
    }
}

要么发布所有代码,要么提供更多信息。这并不足以调试代码(除非有人正尝试做与您完全相同的事情)。 - Stefan Mai
除了将我的WebBrowser的“DocumentCompleted”事件分配给我的“OnDocumentCompleted”方法并在我的窗体的“Load”事件上导航到Google之外,没有其他代码。就这些。 - Juan
无论如何,如果这有助于您帮助我,我会发布整个内容。 - Juan
无法复现。这里运行正常... - Stefan Mai
它能持续运作几秒以上吗?你需要上下滚动大约5-10秒。 - Juan
@JuanLuisSoldi 你在使用 HTMLWindowEvents_Event 的汇编引用是什么? - Pomster
1个回答

7

好的,我找到了一个解决方案:

    protected override void OnDocumentCompleted(WebBrowserDocumentCompletedEventArgs e)
    {
        Follow();
        if (!IsBusy && Url == e.Url && ReadyState == WebBrowserReadyState.Complete)
        {
            Document.Window.AttachEventHandler("onscroll", DocScroll);
        }
    }

如果以这种方式附加,它可以正常工作(到目前为止...)。甚至不需要使用mshtml。

可以运行。我想知道为什么mshtml方式的示例代码这么少。 - Damn Vegetables

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接