描述:
我正在进行针对IE浏览器的BHO编程,在其中的invoke函数中,我去截获DISPID_BEFORENAVIGATE2事件消息,然后对要访问的URL进行分析.
我从invoke的参数pDispParams->rgvarg[5]中获取要访问的URL,然后,分析此URL是否合法,如果合法,那么用户可以正常去访问此URL,如果非法,那么我就将用户IE窗口置成空页.
现在我的问题是,当用户访问非法URL时,我把IE窗口置成空页
pCBHO->m_spWebBrowser2->Navigate2(&CComVariant("about:blank"), NULL, NULL, NULL, NULL);
然后,我把pDispParams->rgvarg[5]也置成了"about:blank",
可是,结果却不理想,IE仅仅是暂时变成了about:blank,之后马上又去访问非法URL了.
请问我该怎么作才能让IE一直成空?需要设置invoke里的哪些参数呢?
解决方案1:
VARIANT_BOOL *&Cancel 这个值置为TRUE就OK。
MSDN没有看懂。
CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> pDisp;
pDisp = pDispParams->rgvarg[6].pdispVal;
CComVariant varURL(*pDispParams->rgvarg[5].pvarVal);
varURL.ChangeType(VT_BSTR);
TCHAR *strurl;
strurl = OLE2T(varURL.bstrVal);
if(_tcsstr(strurl,_T("baidu.com")) != NULL)
{
CComBSTR urlError = _T("about:blank");
VARIANT vEmpty = {0};
pDisp->Navigate(urlError, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
}
这段代码我试过了,可以实现你要的效果。
主要是把“baidu.com”当作不合法的网站。
您可能想查找下面的文章:
- 基于ATL的应用(BHO中如何使用MFC的类CString,CFileDialog等)?
- 高分求教:BHO技术拦截Flash,但写入的js代码无效!
- 关于BHO拦截按键的问题
- 想BHO只加载ie,不加载我的电脑,但出错atlbaseh中5668行,ATLASSERTpM->m_hInst!=NULL;
- VC++开发BHO插件—定制你的浏览器
- BHO的问题
- 在一个ie(BHO,band)插件中如何控制ie的弹出窗口的。
- 什么工具可以反编译一个DLL,这个dll是bho
- BHO中DIID_HTMLElementEvents2在哪个头文件中定义?
- 在BHO中的DISPID_DOCUMENTCOMPLETE事件中取不到IHTMLDocument2的属性