Webbrowser新建页面只能显示一个frame.

lother 2018-04-15 12:46:32
在webbrowser,点击第一页的某个链接,新建第二页并打开链接,但是没有打开所有的frame(只打开第一个frame),不知是为什么?

extern IDispatch** NewWindowDispatch3;
extern LONG_PTR RunCreateWindowProc;
void _stdcall WebBrowser::NewWindow2( IDispatch **ppDisp, VARIANT_BOOL* &Cancel)
{
NewWindowDispatch3 = ppDisp;
CallWindowProc( (WNDPROC)RunCreateWindowProc, NULL, WM_Y_OPEN_NW2, 0, 0);
*Cancel = VARIANT_FALSE;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
case WM_CREATE:
RunCreateWindowProc = ( LONG_PTR)WndProc;
NewWindowDispatch3 = 0x0;
break;
case WM_Y_OPEN_NW2:
openNewWindow2( "Sub Parts");
break;}
return 0;
}
void openNewWindow2( string Description)
{
WebForm->openDefaultWeb("about:blank");
WebForm->getBrowser()->GetWebBrowser2()->put_RegisterAsBrowser( VARIANT_TRUE);
LPDISPATCH disp = NULL;
HRESULT hr = WebForm->getBrowser()->GetWebBrowser2()->get_Application( &disp);
if( SUCCEEDED(hr))
{
*NewWindowDispatch3 = disp;
}
}

另外,如果使用下面的代码第一次成功新建了一个IE窗口,并导向了链接。(它弹出一个提示,匆忙之中按了确定键)之后再也不能新建IE窗口,一闪就退,并导向原来窗口的最后一个frame来打开点击的链接?
void _stdcall WebBrowser::OnNewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel,
DWORD dwFlags,
BSTR bstrUrlContext,
BSTR bstrUrl)
{
IWebBrowser2 *wb = NULL;

CoCreateInstance(CLSID_InternetExplorer,
NULL,
CLSCTX_LOCAL_SERVER, //CLSCTX_ALL ,
IID_IWebBrowser2,
(void**)&wb);


wb->put_RegisterAsBrowser(VARIANT_TRUE);
wb->put_Visible(VARIANT_FALSE);
wb->get_Application(ppDisp);
}
...全文
1079 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaolixing01 2018-04-24
  • 打赏
  • 举报
回复
不要用IE,不要用IE,不要用IE,不要用IE 重要的事说三遍!不要用IE
yaolixing01 2018-04-24
  • 打赏
  • 举报
回复
ie就是坑,可以试试他山框架
lother 2018-04-17
  • 打赏
  • 举报
回复
我试试加个NavigateError, 不过用的是API没现成代码,哎! 新建弹出窗口是因为想通过弹出窗口的页面获得url, 先隐藏这个弹出窗口,get url, 然后关掉隐藏窗口。但是有时能用,有时就一闪即灭。也不知道webbrowser是否有缺陷。在newwindow里不加任何代码,关键新建窗口不出现。ie也并没有设置对这个网站的弹出窗口的拦截
worldy 2018-04-17
  • 打赏
  • 举报
回复
OnNewWindow里,不需要你 CoCreateInstance(CLSID_InternetExplorer,。。。。。。。。。。 你把ppDisp读到的数据就是一个CLSID_InternetExplorer
zgl7903 2018-04-17
  • 打赏
  • 举报
回复
捕捉 NavigateError 异常, 看看是否有页面加载错误?
lother 2018-04-17
  • 打赏
  • 举报
回复
不是这个意思,并不是用第一个frame里的链接在第二个frame里打开页面。 在webbrowser里新建一页,然后打开一个页面,这个页面包括多个frame. 这个新建页的启动是其它页面的一个链接。 错误的结果是:显示一个标题头的frame,然后,不知道是中断还是不响应,就是不显示另外的frame.
zgl7903 2018-04-17
  • 打赏
  • 举报
回复
lother 2018-04-17
  • 打赏
  • 举报
回复
有没有人啊,看看啊,
lother 2018-04-16
  • 打赏
  • 举报
回复
Navigate完全正常,其它都调通了,就是这点,不知道是Webbrowser继承后,继承的方法有误,还是其它。另外,今天内网有点问题,但是,void _stdcall WebBrowser::OnNewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl) { IWebBrowser2 *wb = NULL; CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, //CLSCTX_ALL , IID_IWebBrowser2, (void**)&wb); wb->put_RegisterAsBrowser(VARIANT_TRUE); wb->put_Visible(VARIANT_FALSE); wb->get_Application(ppDisp); } 这一段奇迹般的好了,可以正常载入弹出页面。就是用webbrowser还是不行
worldy 2018-04-16
  • 打赏
  • 举报
回复
先别着急加OnNewWindow3之类的代码,你就简单的使用Navigate到你的网页,看看能否正常显示(一般都会正常显示) 其后,再添加你的控制代码
lother 2018-04-15
  • 打赏
  • 举报
回复
路过来看看,头痛啊!

15,979

社区成员

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

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