在aspx网站中使用webBrowser控件

本文关键字:webBrowser 控件 aspx 网站 | 更新日期: 2023-09-27 18:17:29

我使用以下代码在aspx网站中使用webBrowser控件作为类-

public CustomBrowser()
{
    //
    // TODO: Add constructor logic here
    //
}
protected string _url;
string html = "";
public string GetWebpage(string url)
{
    _url = url;
    // WebBrowser is an ActiveX control that must be run in a
    // single-threaded apartment so create a thread to create the
    // control and generate the thumbnail
    Thread thread = new Thread(new ThreadStart(GetWebPageWorker));
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();
    string s = html;
    return s;
}
protected void GetWebPageWorker()
{
    using (WebBrowser browser = new WebBrowser())
    {
        //  browser.ClientSize = new Size(_width, _height);
        browser.ScrollBarsEnabled = false;
        browser.ScriptErrorsSuppressed = true;
        browser.Navigate(_url);
        browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
        // Wait for control to load page
        while (browser.ReadyState != WebBrowserReadyState.Complete)
            Application.DoEvents();
        html = browser.DocumentText;
    }
}

这工作得很好,但是我希望添加其他方法到类中使用相同的WebBrowser对象,所以添加类似-

的东西
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
            if (browser.Document.Body.InnerHtml != null)
            {

                 browse();
            }
    }
private void browse(object sender, EventArgs e)
    {
            browser.Navigate("url");

    }

然而,我不能访问WebBrowser对象,因为它不是全局的,而且如果我将它设置为全局aspx不允许这是可能的吗?

在aspx网站中使用webBrowser控件

您不需要将其设置为全局。你可以在你的CustomBrowser类中定义一个WebBrowser的私有实例,像这样:

private WebBrowser _browser;
public CustomBrowser()
{
    _browser = new WebBrowser();
}

有了这个,你的新方法可以访问WebBrowser的同一个实例,即_browser。您的CustomBrowser类需要实现IDisposable接口,因为WebBrowser是一个一次性对象。例如:

public void Dispose()
{
    if (_browser != null)
    {
        _browser.Stop();
        if (!_browser.IsDisposed)
        {
            _browser.Dispose();
        }
    }
}

IDisposable实现参考