CDHtmlDialog 浏览器遇到的服务器忙( Server Busy)问题
2015-02-03 17:18
387 查看
今天用CDHtmlDialog创建了一个简单的浏览器程序,遇到了一个问题,记录一下。
问题描述:当超链接的打开方式为_blank的时候,会弹出一个服务器忙的对话框,网页内容:
点击百度链接,出现以下对话框:
如果网页代码中的a标签的打开方式不是_blank则能正常进行网页跳转,网页代码改为下面的方式,正常跳转:
跳转后页面:
百度中的新闻 贴吧等链接的打开方式也是以_blank方式,如果点击人一个链接,都会出现上面的服务忙对话框,下面给出点击贴吧的截图:
不知是何原因,难道是没有足够的页面用来打开新的网页,望有知道的高手能告知原因。
解决方案:
既然是由于a标签的打开方式引起的,那就对a标签进行一下处理吧。
思路:1、获取点击位置的标签
2、获取标签名称,查看是否为a标签
3、如果是a标签,获取打开方式,并获取href网址
4、关闭当前页面,打开href指向的页面
在PreTranslateMessage中获取鼠标按下消息,在鼠标按下消息中处理是否a标签,并对打开方式为_blank的a标签进行处理,下面给出判断页面点击位置标签的代码:
这样,上面的问题就得到了暂时的解决(因为自己并不知道上述问题的真正原因)。
问题描述:当超链接的打开方式为_blank的时候,会弹出一个服务器忙的对话框,网页内容:
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> </HEAD> <BODY ID=CAntiNetTimeoutDlg BGCOLOR=LIGHTGREY style="font-family:MS Shell Dlg;font-size:9"> <a href="http://www.baidu.com" target="_blank" >百度</a> <TABLE WIDTH=100% HEIGHT=100%> <TR WIDTH=100% HEIGHT=45%> <TD ALIGN=CENTER VALIGN=BOTTOM> TODO: Place controls here. </TD> </TR> <TR WIDTH=100% HEIGHT=100%> <TD ALIGN=RIGHT VALIGN=BOTTOM> <BUTTON STYLE="WIDTH:100" ID="ButtonOK">确定</BUTTON> <BUTTON STYLE="WIDTH:100" ID="ButtonCancel">取消</BUTTON> </TD> </TR> </TABLE> </BODY> </HTML>
点击百度链接,出现以下对话框:
如果网页代码中的a标签的打开方式不是_blank则能正常进行网页跳转,网页代码改为下面的方式,正常跳转:
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> </HEAD> <BODY ID=CAntiNetTimeoutDlg BGCOLOR=LIGHTGREY style="font-family:MS Shell Dlg;font-size:9"> <a href="http://www.baidu.com" target="_parent" >百度</a> <TABLE WIDTH=100% HEIGHT=100%> <TR WIDTH=100% HEIGHT=45%> <TD ALIGN=CENTER VALIGN=BOTTOM> TODO: Place controls here. </TD> </TR> <TR WIDTH=100% HEIGHT=100%> <TD ALIGN=RIGHT VALIGN=BOTTOM> <BUTTON STYLE="WIDTH:100" ID="ButtonOK">确定</BUTTON> <BUTTON STYLE="WIDTH:100" ID="ButtonCancel">取消</BUTTON> </TD> </TR> </TABLE> </BODY> </HTML>
跳转后页面:
百度中的新闻 贴吧等链接的打开方式也是以_blank方式,如果点击人一个链接,都会出现上面的服务忙对话框,下面给出点击贴吧的截图:
不知是何原因,难道是没有足够的页面用来打开新的网页,望有知道的高手能告知原因。
解决方案:
既然是由于a标签的打开方式引起的,那就对a标签进行一下处理吧。
思路:1、获取点击位置的标签
2、获取标签名称,查看是否为a标签
3、如果是a标签,获取打开方式,并获取href网址
4、关闭当前页面,打开href指向的页面
在PreTranslateMessage中获取鼠标按下消息,在鼠标按下消息中处理是否a标签,并对打开方式为_blank的a标签进行处理,下面给出判断页面点击位置标签的代码:
BOOL CAntiNetTimeoutDlg::IsAtag() { CComVariant variant(NULL); CString strTarget,strTagName,strHref; BSTR szTagName; long nTop; CPoint point; IHTMLElement *pElement = NULL; ::ATL::CComPtr<IHTMLDocument2> spHtmlDoc; LPDISPATCH lpDisp = NULL; GetCursorPos(&point); ScreenToClient(&point); m_pBrowserApp->get_Document(&lpDisp); HRESULT hr = lpDisp->QueryInterface(IID_IHTMLDocument2, (void**) &spHtmlDoc); if(spHtmlDoc) { if(spHtmlDoc.p) { m_pBrowserApp->get_Top(&nTop);//获取网页窗体距对话框顶部的距离 if(spHtmlDoc.p->elementFromPoint(point.x,point.y - nTop,&pElement) == S_OK)//修正鼠标点击时y方向上的值,需要减掉距离窗体顶部的高度值 { if (pElement != NULL) { hr = pElement->get_tagName(&szTagName);//获取标签名字 if(szTagName != NULL) { strTagName.Format(_T("%s"),szTagName); if(strTagName.CompareNoCase(_T("a")) == 0)//判断是非a标签 { hr = pElement->getAttribute(_T("target"),0,&variant);//获取打开方式 if (variant.vt == VT_BSTR) { strTarget = variant.bstrVal; if (strTarget.CompareNoCase(_T("_blank")) == 0)//判断是非_blank { pElement->getAttribute(_T("href"),0,&variant);//获取连接地址 if (variant.vt == VT_BSTR) { strHref = variant.bstrVal; if (PathIsURL(strHref)) { spHtmlDoc->clear(); spHtmlDoc->close();//关闭当前页面,打开href指向的页面 Navigate(strHref); } } return TRUE; } } } } } } } } return FALSE; }
这样,上面的问题就得到了暂时的解决(因为自己并不知道上述问题的真正原因)。
相关文章推荐
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- 前台HTML控件和后台服务器控件(经常遇到的问题总结)
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- Lync Server 2010 客户端访问提示验证服务器中的证书时遇到问题解决方法
- SQL Server Database在C#编程下遇到的问题:“provider:SQL Network Interfaces,error:26-定位指定的服务器/实例时出错”的解决办法
- web deploy 部署到远程服务器(win server 2008 r2) 遇到的问题。。。。
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- CDHtmlDialog 相对路径问题
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- 在开发BS系统中,遇到了上传服务器数据的问题
- 3Com office connect+Server_U 搭建Ftp 服务器遇到的问题
- 在Delphi中使用MS SQL Server ,MS Access遇到的问题
- 关于CommunityServer2.1附件过大报错,即ASP.NET2.0中附件设置问题"Cannot Upload Large Files When You Use the HtmlInputFile Server Control"
- 我遇到的"服务器应用程序不可用"不可用问题以及解决办法
- 在启用sharepoint portal server 2003的SSO时,提示“无法连接到数据库服务器,请检查配置账户的权利”的问题的解决方法
- Windows 中的“RPC Server is Unavailable”(RPC 服务器不可用)问题