2012-02-28 3 views
1

이전 Windows VB6 프로젝트의 일부분을 유지해야합니다. (즉, VB.NET으로 마이그레이션하라고 말하지 마십시오.) 이 프로그램은 로컬 HTML 파일 (다른 통계를 포함하지만 중요하지 않음)을로드하는 잘 알려진 웹 브라우저 컨트롤 (IE)을 포함합니다. 웹 브라우저보기에서 스크롤 막대를 원하지 않는다는 것을 알면 (HTML 페이지가 웹 브라우저 창보다 길어도 최상위에 무엇이 있는지 알아야 함) DocumentContext 이벤트에서 DOM을 다음과 같이 관리합니다.DOM 작업 완료를 기다리는 방법?

Private Sub wb_DocumentComplete(ByVal pDisp As Object, URL As Variant) 
wb.Document.documentElement.Style.overflow = "hidden" 
ProcessWithDStats 
End Sub 

모든 소리가 제대로 들리고 세로 스크롤 막대가 사라지 긴하지만, 이제는 이전 DOM 작업이 완전히 완료되었는지 확인해야하는 ProcessWithDStats 하위 (많은 기능을 호출하는 큰 하위)에 일부 항목을 추가해야합니다. 평균 : 스크롤바가 숨겨져 있고 내용이이 새로운 너비의 스크롤 막대에 맞게 다시 정렬되었습니다.

그럼, 어떻게해야합니까?

DOM 관리가 실제로 렌더링되기 전에 ProcessWithDStats가 실행됩니다!

는 지금까지 여기 내 시도이다 : 나는 두 선 사이 (문서 폭 및 브라우저 클라이언트 영역을 비교) 스크롤 테스트를 추가하려고했습니다

  • ,하지만 작동하지 않습니다 테스트는 정상이지만 ProcessWithDStats가 사용되기 전에 적용되는 시간이 충분하지 않습니다 (스크롤 막대가 사라지면이 너비가 변경되어 텍스트 리플 로우).

  • 나는) (잠을 시도했다, 그러나 그것은 전체 프로그램 (포함 웹 브라우저 렌더링)

음이 웹 브라우저 컨트롤에서 주어진 DOM 관리의 실제 응용 프로그램을 기다릴 수있는 방법이 잠금 ? 당신은 적어도이 ... 할 필요가

Do 
Doevents 
Loop Until [DOM modification and rendering completed] 
+0

문서에서 프레임을 사용합니까? 그렇다면 컨트롤은 여러 DocumentComplete 이벤트를 발생시킬 수 있으므로 최상위 문서인지 확인하려면 pDisp 매개 변수를 살펴야합니다. if (pDisp is WebBrowser1.Object) Then ... – jac

+0

불행히도, 아니요, Beaner : 프레임이나 iframe이 없습니다. 그러나 내 질문 이후로 나는 시도한 아이디어가 있었고 작동하는 것처럼 보였습니다. (하지만 똑똑하지는 않습니다. 그래서 생각합니다. 그래서 진짜이고 똑똑한 해결책을 기다리고 있습니다). 두 줄 사이에 아무 것도하지 않고 이전 "오버플로 숨겨진"것과 동기되는 장점을 가진 더미 DOM 작업을 추가합니다. doc.parentWindow.scrollBy 0, 1 doc.parentWindow.scrollBy 0, -1 그래서 ProcessWithDStats에 참여하게되면 리플 로우가 수행됩니다. 그것에 대해 어떻게 생각하세요? 더 좋은 방법이 있습니까? – hilow

+0

아무리 좋은 일이 있어도 괜찮은 것 같습니다. – jac

답변

0

:

는 뭔가처럼 의미한다. 버전에

Do 
Sleep 100 
Doevents 
Loop Until wb.Busy = False And wb.ReadyState = 4 

.Busy는 .IsBusy이라고하지만, 같은 일을하다 할 수있다.

또한 브라우저가 로딩되었는지 여부를 정확하게 알고 싶거나, 더 많이 알고 싶거나 위의 것보다 더 정확한 정보가 필요하면 이전 답변을 읽어보십시오. 당신이 현재 가지고있는 것보다 훨씬 더 나은 해결책이 당신을 위해 포함되어 있습니다. 이 단순한 방법보다 적게 선택하면 충분할 수있는 경우 웹 사이트의 100 % 또는 일부만 선택하도록하십시오.

나는 어쨌든, 환호가 간다.

관련 문제