[InetSDK]HTML フレームの WebBrowser オブジェクトモデルを取得する方法

サポートが終了した KB の内容についての免責事項

この記事は、マイクロソフトがサポートを提供しなくなった製品について記述しています。 したがって、この記事は「現状のまま」で提供され、更新されることはありません。

概要

この文書は、HTML ページのフレーム ウィンドウの WebBrowser オブジェクトにアクセスするために使うことができる標準的なテクニックについて詳しく説明しています。

詳細

以下のコードは、各フレームのコンテンツをリフレッシュするために、HTML ページのフレームの WebBrowser オブジェクトモデルにアクセスする方法を示しています。


このコードで最も重要な部分は、ページに埋め込まれているものを列挙するために HTML ドキュメント オブジェクトモデルの IOleContainer::EnumObjects メソッドを使用していることです。それぞれ埋め込まれているものはページ内のコントロールを意味します。このコードでは、IWebBrowser2 インターフェイスに対して各コントロールのオブジェクトをクエリーすることによって、コントロールがサブフレームであるかどうかを確認できます。さらに、IWebBrowser2 インターフェイスはそれが WebBrowser オブジェクトモデルであることを意味します(IWebBrowser2 インターフェイスに対する QueryInterface が成功することで、そのコントロールが WebBrowser オブジェクトモデルであることが確認できます)。

サンプル

   // ドキュメントの IDispatch を取得
LPDISPATCH lpDisp = NULL;
lpDisp = m_webBrowser.GetDocument();

if (lpDisp)
{
IOleContainer* pContainer;

// コンテナ取得
HRESULT hr = lpDisp->QueryInterface(IID_IOleContainer,
(void**)&pContainer);
lpDisp->Release();

if (FAILED(hr))
return hr;

IEnumUnknown* pEnumerator;

// フレームに対する enumerator を取得
hr = pContainer->EnumObjects(OLECONTF_EMBEDDINGS, &pEnumerator);
pContainer->Release();

if (FAILED(hr))
return hr;

IUnknown* pUnk;
ULONG uFetched;

// すべてのフレームを列挙、リフレッシュする
for (UINT i = 0; S_OK == pEnumerator->Next(1, &pUnk, &uFetched); i++)
{
// IWebBrowser2 の QueryInterface で、
// 埋め込みブラウザ(フレーム)を持っているか確認
IWebBrowser2* pBrowser;

hr = pUnk->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser);
pUnk->Release();

if (SUCCEEDED(hr))
{
// フレームをリフレッシュ
pBrowser->Refresh();
pBrowser->Release();
}
}

pEnumerator->Release();
}
追記:HTML ページにホストされた ActiveX コントロールは、同じような手順でこのテクニックを使うことができます。一般的に、安全でない WebBrowser オブジェクトモデルにアクセスする ActiveX コントロールは、スクリプティングに対して安全ではありません。安全であることを示すために、IObjectSafety インターフェイスをインプリメントする必要があります。

関連情報

サイトビルダーネットワークワークショップ (Site Builder Network Workshop) 内のブラウザテクノロジーの再利用:

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID
196340 (最終更新日 1998-12-25) をもとに作成したものです。


プロパティ

文書番号:196340 - 最終更新日: 2004/04/01 - リビジョン: 1

フィードバック