网上有用枚举元素的方法来获得子框架,但是这种情况一来好像受到同源策略的影响,二来无法在框架的js被执行前获得控制,所以想通过DISPID_NAVIGATECOMPLETE2等事件发生时获取IHTMLWindow2对象,但是碰到一些问题,以下是我的代码 case DISPID_NAVIGATECOMPLETE2:
{
HRESULT hr = S_OK; CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> pWeb;
pWeb = pDispParams->rgvarg[1].pdispVal;

LPOLESTR lpURL = NULL;
pWeb->get_LocationURL(&lpURL);
MessageBox(NULL, lpURL, _T(""), 0); IHTMLDocument2 *pDoc = NULL;
hr = pWeb->get_Document((IDispatch **)&pDoc);
if (SUCCEEDED(hr) && pDoc != NULL)
{
MessageBox(NULL, _T("docs"), _T(""), 0); IHTMLWindow2 *pWnd = NULL;
hr = pDoc->get_parentWindow(&pWnd);
if (SUCCEEDED(hr) && pWnd != NULL)
{
MessageBox(NULL, _T("wnd"), _T(""), 0);
}//  IDispatch *pdispScript = NULL;
//  hr = pDoc->get_Script((IDispatch **)&pdispScript);
//  if (SUCCEEDED(hr) && pdispScript != NULL)
//  {
//  MessageBox(NULL, _T("script"), _T(""), 0);
//  }
} break;
}无论在调用get_parentWindow还是get_Script的过程中都会使得浏览器崩溃,不知道为何