약간의 연구 끝에이 COM 연결 지점 (이벤트 처리기)이 DispId(0)
으로 지정되었음을 알았습니다. 콜백 기능은 클래스의 인스턴스로 표현됩니다 좋아 : DispId(0)
이후
// These attributes may be optional, depending on the project configuration.
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class EventListener
{
[DispId(0)]
// The "target" parameter is an implementation detail.
public void NameDoesNotMatter(object target, IDOMEvent evt) { ... }
}
는 호출하는 기본 방법을 지정하는 방법의 실제 이름은 중요하지 않습니다. 그러나 메소드 매개 변수는 확실히 중요합니다. 예를 들어 IHTMLElement.onclick
에는 인수가없는 콜백이 할당되어야하고 IHTMLElement2.attachEvent
은 IHTMLEventObj
(IHTMLEventObj2
, ..., 6
또는 심지어 object
) 유형의 매개 변수를 사용하여 콜백을받습니다.
요약하면 COM IDispatch
콜백은 올바른 인수를 허용하고 [DispId(0)]
이라는 주석이 달린 메서드로 COM 표시 클래스를 사용하여 C#에서 구현할 수 있습니다. IE9 DOM 객체는 브라우저 호환성을 위해 낮은 문서 모드를 사용하고이 메소드를 지원하지 않는 한이 모든에도 불구하고
는 W3C DOM 이벤트 API를 방지 솔루션이 더 적합 할 수있다. 예를 들어, addEventListener
을 사용하는 확장 프로그램은 IE7 모드로 렌더링되는 Bing과 같은 페이지에서 실패합니다.
IWebBrowser2
인스턴스가 사용하는 문서 모드를 수동으로 F12 개발자 도구를 사용하지 않고 설정할 수도없는 것처럼 보입니다.
출처
2011-02-15 21:31:15
ide