返回信息流已经实现了简单的浏览器,但是在其中点超链接后会自动开启新的IE窗口,应该在NEWWINDOWS2中进行处理
查询了下网络,有一种解决方式 ,但是不报错也没反应,由于刚用MFC,下面程序的主要意思应该是将新窗口的ppDisp赋值为原窗口的pDisp,不知道理解得对不对哈,是否会然后自动调用NEVIGATE2事件导航到新的URL上?还是应该使用ppDisp来在原窗口产生新页?
弄了快一个星期的这个问题了,望大牛赐教!!!
void CADSLTryDlg::NewWindow2Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel)
{
// TODO: 在此处添加消息处理程序代码
IUnknown* pUnk =this->m_oIExplorer.GetControlUnknown();
if(pUnk)
{
IDispatch* pDisp = NULL;
HRESULT hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp);
if(SUCCEEDED(hr)&&pDisp)
{
*ppDisp=pDisp;
*Cancel = FALSE;
}
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #26301同步于 2009/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
webbrowser 超链接打开新窗口 请教
AHU
2009/7/15镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
我理解是如果是可以自动调用NEVIGATE2方法的话就应该取消新窗口这个动作,另外把这句去掉仍然是不报错也无动作,不知道怎样使用LPDISPATCH* ppDisp来产生窗口
谢谢回复
【 在 hs 的大作中提到: 】
: 为什么是*Cancl=FALSE 不是应该取消打开么?
【 在 AHU 的大作中提到: 】
: 我理解是如果是可以自动调用NEVIGATE2方法的话就应该取消新窗口这个动作,另外把这句去掉仍然是不报错也无动作,不知道怎样使用LPDISPATCH* ppDisp来产生窗口
: 谢谢回复
*Cancel=true不应该是取消新窗口的动作么?
还有就是你的意思是产生一个新窗口吧, 你产生的应该是一个对话框,或者是目前的主窗口,然后再在新的对话框中访问新的URL。不应该仅仅是新的webbrowser, 你用的这个LPDISPATCH* ppDisp能产生新的对话框么?
如果你想直接在原来窗口打开的话,可以取消打开新窗口之后,通过ppDisp来获得要浏览窗口的URL,然后调用naviagate2来访问新的地址
ps:这种方法应该只对<a herf="XXX" target="_blank">***</a>有效,对JS中的window.open()应该是无效的。