Bu soruyu yazma başlamadan önce, ben bir iframe bir web sayfasında varsa her belge tamamlandıktan sonra, DocumentCompleted olay (daha sonra bir kez daha kovulacak olacağını, sorununWebBrowser denetimi nasıl kullanılır DocumentCompleted olayı C#?
// 1. navigate to page
// 2. wait until page is downloaded
// 3. read and write some data from/to iframe
// 4. submit (post) form
aşağıdaki çözmeye edildi çalışıyordu). Programın tamamlanmamış ve doğal olarak başarısız olan DOM verilerini okumayı denemesi büyük olasılıktı.
Ama bu soruyu yazarken aniden iken canavar 'ne' bana ilham ve ben çözmeye çalıştığını, sorunun fix'ed. Bunu Google’da başarısızlıkla karşılaştığımda, burada yayınlamanın güzel olacağını düşündüm.
private int iframe_counter = 1; // needs to be 1, to pass DCF test
public bool isLazyMan = default(bool);
/// <summary>
/// LOCK to stop inspecting DOM before DCF
/// </summary>
public void waitPolice() {
while (isLazyMan) Application.DoEvents();
}
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
if(!e.TargetFrameName.Equals(""))
iframe_counter --;
isLazyMan = true;
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
if (!((WebBrowser)sender).Document.Url.Equals(e.Url))
iframe_counter++;
if (((WebBrowser)sender).Document.Window.Frames.Count <= iframe_counter) {//DCF test
DocumentCompletedFully((WebBrowser)sender,e);
isLazyMan = false;
}
}
private void DocumentCompletedFully(WebBrowser sender, WebBrowserDocumentCompletedEventArgs e){
//code here
}
Şu an için en azından 5m kesmek iyi çalışıyor gibi görünüyor.
Belki de google veya MSDN sorgulamada başarısız, ancak bulamıyorum: "C# Webbrowser denetimi DocumentCompleted olay nasıl kullanılır?"
Yorum: Webcontrol hakkında çok şey öğrendikten sonra, FuNKY şeyler yaptığını buldum.
Belgenin tamamlandığını algılasanız bile, çoğu durumda sonsuza kadar böyle kalmayacak. Sayfa güncellemesi çeşitli şekillerde yapılabilir: çerçeve yenileme, istek gibi ajax veya sunucu tarafı itme (senkronize olmayan iletişimi destekleyen bazı kontrollere sahip olmanız ve html veya JavaScript birlikte çalışması gerekir). Ayrıca bazı iframe'ler asla yüklenmez, bu yüzden sonsuza dek onları beklemek en iyi fikir değildir.
if (e.Url != wb.Url)
DocumentCompleted olayı sırasında IsBusy özelliğinin durumu nedir? – AMissico
IsBusy, ilk kare hazır olduğunda false değerini döndürür. – Margus
Sadece bir not, kodunuz çok normal çerçevelerle çalışmaz. –