2015-01-17 40 views
11

내 Win32 C++ 응용 프로그램의 대화 상자 (예 : MFC, ATL 등)에 웹 브라우저가 포함되어 있으며 초기에 일부 HTML 코드가 포함 된 문자열에서 문서의 내용을 설정했습니다. 이 HTML은 올바르게 렌더링됩니다. "문서 완료"이벤트가 발생하면 DOM을 조작합니다 (예 : 텍스트 노드를 BODY 요소에 추가하여.DOM을 변경 한 후 IWebBrowser2가 새로 고침되지 않는 이유는 무엇입니까?

BODY 요소의 인터페이스에서 IHTMLElement::get_outerHTML을 호출해도 텍스트 노드가 있음을 나타내지 만 브라우저 내용이 대화 상자에 변경되지 않은 것으로 나타납니다.

나는 IWebBrowser2::Refresh::InvalidateRect/::UpdateWindow을 모두 호출 해 보았지만 어느 것도 도움이되지 않았습니다.

아이디어가 있으십니까? 필요한 경우 내 코드의 일부를 게시 할 수 있습니다.

또한, HTML 문서 일 때 IWebBrowser2::Refresh 말이

  • 여부를 사람이 원칙적으로 새로 고침 어떻게 든 DOM을 수정 한 후 트리거 될 필요가 있는지 여부

    • 을 알고 있나요 (또는 자동이어야 함) URL이 아닌 문자열에서로드 됨

    이 답변에 대한 답변을 원하십니까?

  • +0

    새로 고침은 자동으로 수행되어야합니다. STA 스레드에서 작업하고 있으며 Windows 메시지를 보내고 있습니까? http://stackoverflow.com/questions/2222365/what-is-a-message-pump –

    답변

    -2

    문제점을 발견했습니다. 내 코드의 버그였습니다. 따라서 페이지를 다시로드하는 코드에서 IWebBrowser2 :: Refresh에 대한 매우 모호한 호출이 발생하여 동적 변경 사항이 DOM으로 되돌려졌습니다.

    0

    는이 마크가 당신을 실현하는 것이이 문제가,

    <html> 
    <head></head> 
    <body> 
    Hello World 
    <script> 
    alert("a"); 
    </script> 
    </body> 
    </html> 
    

    경고 상자가 표시되면 아무것도하지만,없이 정적 콘텐츠의 예를 사용하여 테스트해야합니다.