最近一直在做一个BHO的插件,所需要的功能就是获得浏览器打开的网页的地址,将地址发送给后台,由后台进行校验,返回结果,这里记录一下怎样获得URL。
在我的插件中,我主要使用了两个事件BeforeNavigate2和DownloadBegin,其实在BeforeNavigate2中就包含有URL 的参数,但是这个事件在进行刷新页面的时候并不能被处罚,所以和DownloadBegin,两个事件来组合使用,从而保证获得所有的页面URL。
但是此时也出现了一个问题,因为在一个页面中会包含多个URL,在DownloadBegin中它会获得所有的URL,而不仅是地址栏中的URL,所以需要做判断,只获取第一次就可以了,我使用的方式是:
void STDMETHODCALLTYPE CObject::BeforeNavigate2(IDispatch *pDisp,
VARIANT *url,
VARIANT *Flags,
VARIANT *TargetFrameName,
VARIANT *PostData,
VARIANT *Headers,
VARIANT_BOOL *Cancel)
{
if (PROMPT_FLAG)
{
return;
}
//获得URL
CComBSTR bstrURL;
m_WebBrowser->get_LocationURL(&bstrURL);
ATL::CString str = COLE2CT(bstrURL);
string szUrl(str.GetBuffer());
fnCheckUrl(szUrl);
}
用它在这两个事件中来获得URL,然后进行相应的检测。在BeforeNavigate2中可以直接用它的参数url,这个也是地址栏URL,但是在进行刷新和当前页面地址栏键入新的地址的的时候是不会触发的,因为我一直没有找到刷新的时候所能触发的事件,所以急用这个方法了,欢迎各位看官拍砖。要是哪位知道在当前页面地址栏输入新地址时候触发的事件,麻烦告知一声,我也修改一下。