2013-08-11 7 views
1

이 코드를 사용할 때 OnRefresh 또는 OnPreRefresh가 BeforeNavigate2를 실행하지 않는 이유는 무엇입니까? this에 따르면 버그는 있지만 어떻게 해결할 수 있습니까? EmbeddedWB를 IE10과 함께 사용하고 있습니다.BeforeNavigate2 & Refresh

EmbeddedWB1.Navigate('http://www.stackoverflow.com'); 
EmbeddedWB1.Refresh; // doesn't fire BeforeNavigate2 
+0

'Webbrowser1'은'TEmbeddedWB' 유형으로 선언되어야합니다. 질문을 수정하고이 정보를 포함하십시오. – TLama

+1

@TLama 아아아 : –

답변

2

어리석은 문제에 대한 오히려 간단한 해결책.

const 
    DLCTL_PRAGMA_NO_CACHE = $00004000; 

procedure Refresh(const Sender: TCustomEmbeddedWB); 
var 
    Flag: OleVariant; 
begin 
    Flag:=DLCTL_PRAGMA_NO_CACHE; 
    Sender.Navigate(Sender.LocationURL,Flag); 
end; 

procedure EmbeddedWB1Refresh(Sender: TCustomEmbeddedWB; CmdID: Integer; 
    var Cancel: Boolean); 
begin 
    Cancel:=True; 
    Refresh(Sender); 
end; 
+0

정말 해결책이 있습니까? 이것이 바로 ['IWebBrowser2 :: Refresh'] (http://msdn.microsoft.com/en-us/library/aa768258(v=vs.85)asp)가 현재해야 할 일입니다. 해당 참조 페이지의 발언 섹션을 참조하십시오 ... – TLama

+0

@ TLama EmbeddedWB.Refresh/Refresh2는 DocumentComplete 또는 OnBeforeNavigate2를 실행하지 않습니다. 이럴거야. –

+0

@TLama 이제는 F5와 함께 작동합니다 .. –

0

비동기 작업입니다. Refresh으로 추적하면 내비게이션을 시작하고 BeforeNavigate2 이벤트를 시작할 기회가 없습니다. 아마도 Refresh에 전화하기 전에 NavigateComplete2이 해일 때까지 기다려야합니다. 정확히 당신이 성취하고자하는 것은 무엇입니까? 참조하는 버그는 귀하의 델파이 코드와 관련이 없으며 .NET에 한정되어 있으며 오래 전에 고정되어 있습니다.

[편집]. 위에서 말한 것은 틀 렸습니다. IE7에서는 사실 일지 모르지만 전화가 바로 Refresh으로 이어지는 경우에도 IE10의 경우 과 NavigateComplete2이 모두 실행됩니다 (한 번). 그러나 WebBrowser 컨트롤에서 해당 사이트 COM 개체로 보낼 OLECMDID_PREREFRESH 또는 OLECMDID_REFRESH 명령을 트리거하지 않습니다. 난 OLECMDID_PREREFRESH 오른쪽 클릭 메뉴 (하지만 여전히 아니OLECMDID_REFRESH)를 통해 수동으로 새로 고침을 통해 왔을 때만 보았다. 이것은 C++/ATL/VS2012로 검증되었습니다. 불행히도이 문제가 델파이와 다른 이유는 무엇입니까?

+0

새로 고침은 BeforeNavigate2를 전혀 실행하지 않습니다. 당신이 그것을 부르는 것은 중요하지 않습니다. –

+1

@ user2665920, 나는 IE7에서 비슷한 문제를 다시 다루었습니다. 나는 그것을 현대판으로 검증하고 여기로 돌아갈 것이다. – Noseratio

+2

이것은 델파이와 관련이 없으며'IWebBrowser2' 인터페이스 자체와 관련이 있습니다. 이 이벤트는 당신이'Refresh' 메소드를 호출하면 인터페이스에 의해 해고 당하지 않습니다. 이보다 더 많은 것이 있습니다. 'Busy'플래그도 설정되지 않고 'ReadyState'값도 변경되지 않습니다. – TLama