.NET WebBrowserコントロールを使用しようとしていて、一般的な問題に遭遇しました。ページが実際に完全に読み込まれたときをどのように伝えますか?私はここを見て、私はGoogleで見て、私は多くの例と質問を見つけたので、私はそれらを試してみました。そして私がナビゲートしようとした最初の場所はhttp://www.microsoft.comでした。それはあまりうまくいかなかった。なぜ.NET WebBrowser DocumentCompletedはmicrosoft.comのために何度も起動しますか?
私のコードは以下の通りです。私は2つの異なるアプローチを試しました - 1つは、URL比較を使用し、1つはフレームを数えました。私は期待どおりに動作しませんでした...私は何らかの形で何度か完了したことを意味するテキスト値で "Form1 - 完了 - 完了 - 完了"を得ました。
複雑なWebページで使用する方が、より信頼性の高い方法がありますか?ここで
は私のコードです:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WebBrowserCompleted
{
public partial class Form1 : Form
{
Uri navTarget = new Uri(@"http://www.microsoft.com");
public Form1()
{
InitializeComponent();
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
//webBrowser1.Navigate(navTarget);
startNavigate(@"http://www.microsoft.com");
}
private int mFrameCount;
private void startNavigate(string url)
{
mFrameCount = 0;
webBrowser1.Navigate(url);
}
private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
mFrameCount += 1;
bool done = true;
if (webBrowser1.Document != null)
{
HtmlWindow win = webBrowser1.Document.Window;
if (win.Frames.Count > mFrameCount && win.Frames.Count > 0)
done = false;
}
if (done)
{
Console.WriteLine("Now it is really done");
this.Text = this.Text + " - Done";
}
}
}
}