이 질문을 쓰기 시작하기 전에, 나는 iframe이 웹 페이지에있는 경우 각 문서가 완료된 후, DocumentCompleted 이벤트 (다음 한 번 더 해고 것, 문제C#에서 WebBrowser 컨트롤 DocumentCompleted 이벤트를 사용하는 방법?
// 1. navigate to page
// 2. wait until page is downloaded
// 3. read and write some data from/to iframe
// 4. submit (post) form
다음 해결했다려고). 프로그램이 완료되지 않았고 자연적으로 실패한 DOM 데이터를 읽으려고했을 가능성이 큽니다.
그러나이 질문을 작성 갑자기하면서 괴물 '하면 어떻게'나에게 영감을하고, 내가 해결하기 위해 노력하고 있다는 문제를 fix'ed. Google에서이 작업에 실패 했으므로 여기에 게시하는 것이 좋을 것이라고 생각했습니다.
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
}
적어도 내 5m 해킹은 정상적으로 작동하는 것처럼 보입니다.
아마 Google이나 MSDN을 쿼리하는 데 실패하고 있는데 찾을 수 없습니다. "C#에서 Webbrowser 컨트롤 DocumentCompleted 이벤트를 사용하는 방법"
비고 : webcontrol에 대해 많은 것을 배운 후, 나는 FuNKY 물건을 발견했습니다.
문서가 완료되었음을 감지하는 경우에도 대부분의 경우 영원히 머물러 있지 않습니다. 페이지 업데이트는 프레임 새로 고침, 요청과 같은 Ajax 또는 서버 측 푸시 (비동기 통신을 지원하는 일부 컨트롤이 필요하며 html 또는 JavaScript interop이 있음)와 같은 여러 가지 방법으로 수행 할 수 있습니다. 또한 일부 iframe은로드되지 않으므로 영원히 기다릴 필요가 없습니다.
if (e.Url != wb.Url)
DocumentCompleted 이벤트 중에 IsBusy 속성의 상태는 무엇입니까? – AMissico
IsBusy는 첫 번째 프레임이 준비되는 즉시 false를 반환합니다. – Margus
참고로 코드는 여러 개의 일반 프레임에서 작동하지 않습니다. –