1

DOMContentLoadedInternet Explorer 9のBHOでイベントを聞きたいのですIHTMLDocument3が、NavigateComplete2イベントのにイベントを添付しましたが成功しませんでした(添付は正常ですが、イベントはトリガーされません)。

onloadについても同様のことを行いました。イベント「onload」をに添付しましたIHTMLWindow3。この場合は正常に動作します。

その時点でページのBODYにアクセスできないため、NavigateComplete2がトリガーされたときにDOMが完全にロードされていないことを知っています。

DOMContentLoadedBHOでキャプチャするにはどうすればよいですか?

4

1 に答える 1

2

なぜ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);
};

これを既存の一部として実装することも、別のクラスを作成することもできます(上記の例のように)。が4(完全)の場合readyState、DOMはそこにあり、使用可能である必要があります。

于 2012-10-22T07:52:56.997 に答える