zoukankan      html  css  js  c++  java
  • webBrowser载入网页机制网页加载是否完毕判断

        根据Browser_DocumentCompleted,Browser_Navigated,Browser_Navigating这三个消息来判断的,用什么计数器啦,还有判断IsBusy,StatusText等。。以上或多或少对于一些网页是可行的,对于另一些网页却又有另外的意外,所以总的来说,都不能通用准确判断,查找许多资料发现wenbbrowser来自于EXwenbbrowser,然而微软在封装之后把其精简了很多东西,本人费劲苦心找到国外牛人封装的扩展wenbbrowser(http://www.codeproject.com/Articles/13598/Extended-NET-2-0-WebBrowser-Control),加以修改后可完美解决,此在此扩展版,可以找本人索取。

       WebBrowser的工作机制大概是这样的,在url上打上www.163.com,这时候,WebBrowser会开始装载www.163.com这个网页,触发一个Browser_Navigating,ReadyState置为非Complete,IsBusy置为true,StatusText置为"请求的url内容",这个文档完毕后,触发一个Browser_DocumentCompleted,同时,ReadyState置为Complete,IsBusy置为false,StatusText置为"完成",如果通常都会有frame,如www.163.com/kk.jsp#fsd什么的,WebBrower就会触发Browser_Navigating,ReadyState置为非Complete,IsBusy置为true,StatusText置为"请求的url内容",再去装载那个frame,完毕后,触发一个Browser_DocumentCompleted,同时,ReadyState置为Complete,IsBusy置为false,StatusText置为"完成",剩下的frame,余次类推。

    因此,可以重新封装 webbrowser控件完美解决多次调用加载完毕方法而正确判断是否最好加载完毕

    继承控件,添加属性

    private bool _AllComplete;

    //是否完成
    public bool AllComplete
    {
        get
        {
            return _AllComplete;
        }
        private set
        {
            _AllComplete = value;
        }
    }

    重写Navigate

    /// <summary>
    /// 同Navigate方法,为了能判断是否加载完成加入AllComplete初始化
    /// </summary>
    /// <param name="urlString"></param>
    public void Open(string urlString)
    {
        this.AllComplete = false;
        this.Navigate(urlString);
    }
    加载完毕事件添加完毕修改属性即可
    使用中只需判断AllComplete属性

    测试通过,屡试不爽!

  • 相关阅读:
    LOJ#551 Matrix
    洛谷P5163 WD与地图
    洛谷P4831 Scarlet loves WenHuaKe
    LOJ#6118 鬼牌
    支配树
    线性插值
    PropertiesConfiguration
    ThreadLocal
    Thread
    FastJson
  • 原文地址:https://www.cnblogs.com/sung/p/2855187.html
Copyright © 2011-2022 走看看