2009-07-30 2 views
2

대개 외부 문서를로드하는 웹 브라우저 컨트롤을 호스팅하고 HTML DOM을 사용하여 일부 수정합니다.WebBrowser 컨트롤 : 탐색 실패 감지

BeforeNavigate2에서 잡히고 처리되는 "닫기"와 같은 가짜 프로토콜을 사용하여 사용자 지정 응용 프로그램 링크를 포함합니다.

링크 타켓의 철자가 틀린 경우 (예 : "spp : CloseWindow") BeforeNavigate는 사용자 지정 처리를 트리거하지 않습니다. 브라우저 컨트롤에 navigaiton 오류가 표시되지 않지만 READYSTATE_INTERACTIVE 상태로 유지되고 NavigateComplete 또는 DocumentComplete이 발생하지 않습니다.


내 문제 : (예를 들어, 검색 또는 내용을 업데이트) 대부분의 작업은 지연과 READYSTATE_COMPLETE에 도달하는 readyState가 대기하고 있습니다. 잘못된 링크를 클릭하면 브라우저가 더 이상 업데이트되지 않으므로 피하고 싶습니다. 어떻게하면됩니까?

  • "DownloadComplete"에서 탐색이 실패했음을 감지 할 수 있습니까? READYSTATE_COMPLETE (아마)
  • 내가 실제로 브라우저에서 지원하는 pseudoprotocols을 감지 할 수 있을까?
에 "브라우저 컨트롤을 재설정"
  • 나는 수 (그래서 "READYSTATE_COMPLETE 또는 READYSTATE_INTERACTIVE and last downloadComplete was broken에 테스트를 휴식을 취할 수있다) "

    (가늠자에서, xxxx: 접두사를 사용하는 것이하지만 지금은 약간의 문제가 있음을 변경, 좋은 생각이 아니었다.)

    Internet Explorer와 Windows가 URLMON.DLL에서 구현 가능한 프로토콜의 확장 목록을
  • 답변

    5

    , 나는 믿는다. 조금은 여기를 보라. out IE architecture.

    BeforeNavigate에서 잘못된 프로토콜을 감지 할 수없는 이유는 프로토콜이 알려지지 않았기 때문에 실제 탐색이 일어나지 않기 때문입니다. 브라우저는 대신 오류 페이지를 표시하기로 결정합니다. 오류 페이지 탐색은 분명히 모든 정상적인 이벤트를 발생시키지 않습니다.

    그러나 탐색이 잡초에 들어갔을 때를 감지하는 방법이 있습니다. 웹 브라우저의 DocumentCompleted 이벤트에 연결하면 오류와 관련된 특정 URL을 검색 할 수 있습니다. 일반적으로 URL은 res : //ieframe.dll로 시작하는 모든 항목을 검색 할 수 있습니다.

    예 :

    • 고해상도 : //ieframe.dll/unknownprotocol.htm#spp : CloseWindow
    • 고해상도 : //ieframe.dll/dnserrordiagoff_webOC.htm# http://192 ...

    더 깨끗한 방법은 DWebBrowserEvents2 interface의 NavigateError에 연결하는 것입니다.

    0

    웹 브라우저 컨트롤 (Google지도)을 호스팅 할 때 탐색이 완료되었다는 메시지가 표시되지만 웹 페이지 자체 렌더링이 완료되지 않았지만 문제가 발생했습니다. 이 문제를 해결하기 위해 우리는 notifyInitialised javascript 함수를 추가하여 사용중인 것과 유사한 메커니즘 인 'app : // onInitialised'로 간단하게 이동했습니다.

    아마도 이렇게 할 수 있습니다 (사용자가 탐색하는 페이지를 제어 할 수있는 경우). 이 알림 메커니즘을 추가하여 코드에서 확인할 수 있습니다. 규정 된 시간 초과 후 수신되지 않으면 무언가가 잘못되었다고 생각하고 관련 메시지를 표시 할 수 있습니다.

    관심이 있으시면 herehere에 설명 된 C++ 코드에서 직접 javascript 함수를 호출하는 메커니즘을 사용했습니다.