网上有用枚举元素的方法来获得子框架,但是这种情况一来好像受到同源策略的影响,二来无法在框架的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的过程中都会使得浏览器崩溃,不知道为何
{
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的过程中都会使得浏览器崩溃,不知道为何
解决方案 »
- vc数据库的操作问题。
- 如何在程序运行的时候调整CStatic控件的大小?
- VC2005映射控件变量和事件速度慢的再研究
- 高手指点,如何获得摄像头设备的位置?
- OpenGL中控制视图的比例
- 一个数据库的问题,急用,请高手解决一下,谢谢!
- 《《《《《哪位有与MSN通信的简单的示例代码??
- 一个困扰我的问题,关于recv(),双手奉献100分!!!!
- 在线等。关于随机函数的问题。20分
- 我引入C:\PROGRAM FILES\COMMON\SYSTEM\ADO\MSADO15.DLL"为什么会提示出enum错误,好像是重定义之类的?
- libpng.lib 和GDI+哪个显示PNG图片效率更高
- ActiveX 处理 IE 的拖拽事件
hr = pWeb->get_Document((IDispatch **)&pDoc);这句有问题
应该是先查询IDispatch,再查询QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);