DISPID_NEWWINDOW3的问题

七魔上主 2018-04-27 11:35:52
采用ATL的方式封装IE,添加DISPID_NEWWINDOW3的事件处理,

SINK_ENTRY_Ex(IDC_IEXPLORE,DIID_DWebBrowserEvents2,DISPID_NEWWINDOW3,_OnNewWIndw3)

在该函数的处理如下:

_OnNewWindow3(LPDISPATH *ppDisp,VARIANT_BOOL *cancel,DWORD dwFlags,BSTR bstrUrlContext,BSTR bstrUrl)
{
IEView *ieView = new IEView;
RECT rc;
::GetClientRect(hProcessWnd,&rc);
ieView->Create(hHostWnd,&rc,L"",WS_CHILDWINDOW|WS_VISIBLE|WS_CLIPSBLINGS|Ws_CLIPCHILDREN);
ieView->m_pWebBrowser->QueryInterface(IID_IDispatch,(void**)ppDisp);
}

IEView继承与CWindowImpl(IEView,CAxWindow> 和IDispEventImpl<IDC_IEPLORE,IEView,&DIID_DWebBrowserEvents2,&LIBID_SHDocVw,1,0>.
出现的问题描述一下:
我在一个页面里面打开一个新链接,打开的方式为:myWindow = window.open(url)。返回的myWindow是一个有效的值,JS里面开启一个定时器,不断的检查myWindow是否关闭。我调试的时候能看到myWindow的各个属性。然后我将打开的页面关闭,关闭的方法是window.close(),然后再看myWindow的值,VS提示的是没有权限。另外,打开和被打开的URL都是在同一个IP地址的同一个端口下,应该不存在跨域的问题。
我尝试了一下方法,因为我打开的时候有QueryInterface,所以应该是有refer信息的,并且我打开新url的返回值myWindow也是有效的。
如果我将_OnNewWindow3的参数cancel设为*cancel = true,那么myWindow = window.open(url)这个时候myWindow的值就为null。
同时可以确定的是,创建打开和被打开的url的处理都是在同一个进程的同一个线程下面。
我现在的需求就是,在一个页面中打开一个新页面,然后定时器不断检测新打开的页面是否关闭。。。




...全文
1469 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Marcelxx 2018-09-10
  • 打赏
  • 举报
回复
需要获取Refer信息,要在响应函数中新建窗口。
蒋晟 2018-06-21
  • 打赏
  • 举报
回复
为啥要定时器不断检测……
新的IEView应该保存父IEView的指针。
抓到DWebBrowserEvents2::WindowClosing事件(脚本关闭)以及WM_CLOSE(关闭按钮)之后调用父IEView的处理函数。
zgl7903 2018-05-02
  • 打赏
  • 举报
回复
赵4老师 2018-04-28
  • 打赏
  • 举报
回复
百度搜相关关键字。

3,055

社区成员

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

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