HTMLDocumentEvents 和 HTMLDocumentEvents2 有什么区别?

What is the different between HTMLDocumentEvents and HTMLDocumentEvents2?

mshtml 的 HTMLDocumentEvents 和 HTMLDocumentEvents2 有什么不同?

这些是不同的接口:不同的方法,尽管有些方法完全相互复制或扩展。

HTMLDocument COM 对象能够使用多个接口传递事件,由 COM 客户端选择使用哪个接口。本来是HTMLDocumentEvents然后需要扩展对象添加新的事件建议保持原接口不变,添加新方法的新事件接口(HTMLDocumentEvents2,HTMLDocumentEvents3,HTMLDocumentEvents4).

扩展接口可以有额外的方法、参数而不会有破坏与使用旧事件接口的现有客户端的兼容性的危险,例如onhelponclick 两个接口上的方法:

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);