0
mshtml의 HTMLDocumentEvents와 HTMLDocumentEvents2의 차이점은 무엇입니까?HTMLDocumentEvents와 HTMLDocumentEvents2의 차이점은 무엇입니까?
mshtml의 HTMLDocumentEvents와 HTMLDocumentEvents2의 차이점은 무엇입니까?HTMLDocumentEvents와 HTMLDocumentEvents2의 차이점은 무엇입니까?
서로 다른 인터페이스를 사용합니다. 서로 다른 인터페이스를 사용하는 경우도 있습니다.
HTMLDocument
COM 개체는 여러 인터페이스를 사용하여 이벤트를 전달할 수 있으며 COM 클라이언트는 사용할 인터페이스를 선택합니다. 원래는 HTMLDocumentEvents
이었고 원래 인터페이스를 그대로두고 새 메서드 인터페이스 (HTMLDocumentEvents2
, HTMLDocumentEvents3
, HTMLDocumentEvents4
)를 추가 할 것을 제안하는 새 이벤트를 추가하는 개체를 확장해야했습니다.
확장 인터페이스는 이전 이벤트 인터페이스를 사용하는 기존 클라이언트와의 호환성을 손상시키지 않으면 서 추가적인 방법, 인수를 가질 수 있습니다.
dispinterface HTMLDocumentEvents {
properties:
methods:
[id(0x8001000a)]
VARIANT_BOOL onhelp();
[id(0xfffffda8)]
VARIANT_BOOL onclick();
dispinterface HTMLDocumentEvents2 {
properties:
methods:
[id(0x8001000a)]
VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
[id(0xfffffda8)]
VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
두 개의 인터페이스에 대한 방법은
onhelp
,onclick
인데 왜 대답입니까? 표시된 메소드는 WebBrowser 컴포넌트의'DWebBrowserEvents' 및'DWebBrowserEvents2' 디스패치에 관한 것이고, op는 MSHTML 컴포넌트의'HTMLDocumentEvents' 및'HTMLDocumentEvents2' 디스패치에 대해 묻고 있습니다. – acelent@PauloMadeira : 정확합니다. 틀린 발췌입니다. –
그래도 여전히 주된 이유는'HTMLDocumentEvents'를 사용하면 문서에서 이벤트 객체를 가져와야합니다 (예 : document-> parentWindow (window); window-> event (& event);). 이벤트 처리기는 문서에 대한 포인터를 미리 가져야했습니다. 'HTMLDocumentEvents2'를 사용하면 모든 메소드에 이벤트 객체를 간단하게 제공 할 수 있습니다. 대부분의 경우 문서에 대한 참조를 유지하지 않고도 충분합니다. 따라서 이벤트 핸들러가 순환 참조에서 문서를 유지하지 못하게합니다. – acelent