How to get the WebBrowser object model of an HTML frame

Article translations Article translations
Article ID: 196340
(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Scott Roberts, Microsoft Corporation.
Expand all | Collapse all

Summary

This article details the standard technique WebBrowser control hosts can use to access the WebBrowser object model of frame windows in an HTML page inside the control. This object model provides extra functionality that is not exposed for the frame window through the HTML object model.

More information

The following code demonstrates how to access the WebBrowser Object Model of frames in an HTML page to refresh the contents of each frame.

The most important piece of the code uses the IOleContainer::EnumObjects method of the HTML Document object to enumerate embeddings on the page. Each of these embeddings represents a control on the page. By querying each control object for IWebBrowser2, this code can determine whether the control is a sub-frame. And IWebBrowser2 represents the WebBrowser Object Model; if QueryInterface succeeds for this interface, the result is a reference to the WebBrowser Object Model.
// Get the IDispatch of the document
LPDISPATCH lpDisp = NULL;
lpDisp = m_webBrowser.GetDocument();

if (lpDisp)
{
   IOleContainer* pContainer;

   // Get the container
   HRESULT hr = lpDisp->QueryInterface(IID_IOleContainer,
                                       (void**)&pContainer);
   lpDisp->Release();

   if (FAILED(hr))
      return hr;

   IEnumUnknown* pEnumerator;

   // Get an enumerator for the frames
   hr = pContainer->EnumObjects(OLECONTF_EMBEDDINGS, &pEnumerator);
   pContainer->Release();

   if (FAILED(hr))
      return hr;

   IUnknown* pUnk;
   ULONG uFetched;

   // Enumerate and refresh all the frames
   for (UINT i = 0; S_OK == pEnumerator->Next(1, &pUnk, &uFetched); i++)
   {
      IWebBrowser2* pBrowser;

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

      if (SUCCEEDED(hr))
      {
         // Refresh the frame
         pBrowser->Refresh();
         pBrowser->Release();
      }
   }

   pEnumerator->Release();
}
Note ActiveX controls hosted in an HTML page can use this technique in a similar manner. In general, an ActiveX control that accesses the unsafe WebBrowser Object Model is not safe for scripting and should implement IObjectSafety interface accordingly for security.

Properties

Article ID: 196340 - Last Review: June 22, 2014 - Revision: 5.0
Keywords: 
kbFAQ kbhowto kbwebbrowser KB196340
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com