如何对页面中的框架指定加载

cwueii 2009-04-07 02:25:24
如同网页内广告拦截一样。浏览器控件打开网页,包含多个iframe或frame,如何让框架内只能打开本站的页面,来自其他地址的页面一概拦截?
我尝试BeforeNavigate2,判断了非本站的URL后该如何操作让此框架空白或指定页面

void CPage1::OnBeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel)
{
// TODO: Add your control notification handler code here
VARIANT tmp;
VariantInit(&tmp);
HRESULT hr = VariantChangeType(&tmp, URL, 0, VT_BSTR);
CString url=tmp.bstrVal;

if(url.Find("www.abc.com")<0)//不是本站地址就清理框架,该用什么方法
{
//CComQIPtr<IWebBrowser2> pWebBrowser2(pDisp);
//CString gotourl="";
//BSTR bstrURL = gotourl.AllocSysString();
//pWebBrowser2->Navigate(bstrURL,NULL,NULL,NULL,NULL);

}
}
...全文
152 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwueii 2009-04-08
  • 打赏
  • 举报
回复
上面几条回答看不明白,是什么意思呢,给个参考?
if(url.Find("www.abc.com") <0)
{
*Cancel = TRUE; //只用这句则一切正常,可拦截,但加入下面4句就出现编译版本不同结果了
CComQIPtr <IWebBrowser2> pWebBrowser2(pDisp);
CString gotourl="about:blank";
BSTR bstrURL = gotourl.AllocSysString();
pWebBrowser2->Navigate(bstrURL,NULL,NULL,NULL,NULL);
}
e7844 2009-04-07
  • 打赏
  • 举报
回复
服务器有毛病,有时会丢字

[甚至所有属性都可写进此比邻也或者是父元素 ]


e7844 2009-04-07
  • 打赏
  • 举报
回复
甚至所有属性都可此比邻也或者是父元素

一方面能起到提示效果,另一方面也可随时将这些属性回填给iframe
e7844 2009-04-07
  • 打赏
  • 举报
回复
这个思路比以上的回答都要好一些

新建一个比邻元素,将iframe的src写进这个比邻元素并删除iframe的src,就象FrontPage的所有ActiveX界面那样,那这个元素用什么好呢?

《div》不行,即使将iframe做成了它的inerhtml,但鼠标插入点有可能跑到div的下边而不是后边,那最好使用什么元素呢?
jameshooo 2009-04-07
  • 打赏
  • 举报
回复
代码中有其它错误才会出现DEBUG和RELEASE版本运行结果不同的情况。
cwueii 2009-04-07
  • 打赏
  • 举报
回复
终于被我发现了区别,测试程序在debug编译下正常运行,在release下编译则正常1次刷新后程序退出,是何道理??
cwueii 2009-04-07
  • 打赏
  • 举报
回复
pWebBrowser2->Navigate(bstrURL,NULL,NULL,NULL,NULL);加这个一刷新页面就完
cwueii 2009-04-07
  • 打赏
  • 举报
回复
唯一区别就是程序中的浏览器控件是在子对话框上,属于CTabCtrl下的1个标签页,加上BeforeNavigate2的控件一刷新会整个程序完蛋,没这事件怎么运行都正常
oyljerry 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cwueii 的回复:]
自己单做个浏览器程序实验,以上代码正确运行。我的程序中页面一刷新就完,真是怪了,但不添加这个事件则正常运行
[/Quote]
看你的程序跟做实验的有什么不一样的地方
cwueii 2009-04-07
  • 打赏
  • 举报
回复
自己单做个浏览器程序实验,以上代码正确运行。我的程序中页面一刷新就完,真是怪了,但不添加这个事件则正常运行
cwueii 2009-04-07
  • 打赏
  • 举报
回复
不过好象也不是清理整个页面,是空白了iframe框架,但所在页面一刷新,刚显示一下整个程序就销毁了,只能成功1次
cwueii 2009-04-07
  • 打赏
  • 举报
回复
spWebBrowser->Navigate,我上面代码就这么用,这样会清理整个包含iframe的页面,甚至直接导致整个窗口销毁
frame框架没问题,可以通过框架名判断直接Navigate走
jameshooo 2009-04-07
  • 打赏
  • 举报
回复
*Cancel = TRUE;
CComQIPtr<IWebBrowser2> spWebBrowser(pDisp);
spWebBrowser->Navigate("about:blank");

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧