我不确定为什么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 应该在那里并且可用。