好的,
看起来您无法明确订阅文档的特定更改。您可以做的是创建一个所谓的“Change Sink”。
每次您更改文档时,无论是通过用户输入还是以编程方式,您都可以获得文档中“某些内容”发生更改的通知。这可以通过实现IHTMLChangeSink接口并将其附加到IHTMLDocument2的 IMarkupContainer2 来完成。
示例代码(不完整):
class CHTMLChangeSink : public IHTMLChangeSink
{
public:
// Implement IUnknown: QueryInterface, AddRef, Release
// Implement IHTMLChangeSink:
HRESULT STDMETHODCALLTYPE Notify()
{
// Notify() is called everytime the document changes
return S_OK;
}
};
CHTMLChangeSink * pChangeSink = new CHTMLChangeSink();
IHTMLDocument2 * pDoc; // lets suppose we already have it
IMarkupContainer2 * pMarkupContainer = nullptr;
if (pDoc->QueryInterface(IID_IMarkupContainer2, reinterpret_cast<void **>(&pMarkupContainer)) == S_OK) {
DWORD dwCookie = 1;
// registration is done here
pMarkupContainer->RegisterForDirtyRange(pChangeSink, &dwCookie);
}
请注意,文档必须完全加载(注册DIID_DWebBrowserEvents2 ::DocumentComplete)。
从现在开始,每当文档发生更改时,您的通知方法将被调用,您可以进行进一步处理以找出更改的内容(例如处理文档中的图像列表)。
玩得开心!