在BHO(IE9)中从未提出的Domcontentload

DOMContentLoaded never raised in BHO (IE9)

本文关键字:Domcontentload BHO IE9      更新时间:2023-10-16

我想在bho for Internet Explorer 9中收听DOMContentLoaded事件9.我已经将事件附加到NavigateComplete2事件中的IHTMLDocument3,没有成功(附件都很好,但是事件是事件不触发)。

我已经做了类似的onload:已将事件" Onload"附加到IHTMLWindow3上。在这种情况下它可以正常工作。

我知道当NavigateComplete2触发时,DOM并未完全加载,因为我当时无法访问页面的主体。

如何在BHO中捕获DOMContentLoaded

我不确定为什么DOMContentLoaded不发射。最合乎逻辑的解释是,当您处理NavigateComplete2时,它已经触发了,尽管在这种情况下您无法访问整个DOM有点奇怪。处理程序内部文档的readyState是什么?

无论如何,一个更好的解决方案可能是为OnReadyStateChange注册一个水槽,类似的东西:

class CDocumentSink :
  public IDispEventImpl<1, CDocumentSink, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 4, 0>
{
public:
  BEGIN_SINK_MAP(CDocumentSink)
    SINK_ENTRY_EX(1, DIID_HTMLDocumentEvents2, DISPID_READYSTATECHANGE, OnReadyStateChange)
  END_SINK_MAP()
  STDMETHOD_(void, OnReadyStateChange)(IHTMLEventObj* ev);
};

您可以将其作为现有的一部分或单独的类实现(如上面的示例中)。当readyState为4(完成)时,DOM应该在那里并且可用。