WebBrowser发生了NewWindow2消息,如何让它不产生新的窗口,而在原来的窗口中显示新的页面。

Carapee 2003-05-25 11:59:56
如题,对于帮助者致以真心的谢意。
如果有必要,我自己会UP。
混分的不要企图在这里混,我不会给的。
...全文
511 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Carapee 2003-05-31
  • 打赏
  • 举报
回复
Some Instances有没有详细一点的介绍?
应该有一定规律吧?
thanks
Pollux2008 2003-05-31
  • 打赏
  • 举报
回复
If you use NewWindow2, the following code fails in all versions of the Internet Explorer:

==============================================================================


void CIEDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel)
{

IUnknown* pUnk = m_Browser.GetControlUnknown();
if (pUnk)
{
IDispatch* pDisp = NULL;
HRESULT hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp);

if (SUCCEEDED(hr) && pDisp)
*ppDisp = pDisp;
}
}

蒋晟 2003-05-30
  • 打赏
  • 举报
回复
Knowledge Base

BUG: Using NewWindow or NewWindow2 to Always Navigate in the Same Window Fails in Some Instances
void CIEDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel)
{

IUnknown* pUnk = m_Browser.GetControlUnknown();
if (pUnk)
{
IDispatch* pDisp = NULL;
HRESULT hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDisp);

if (SUCCEEDED(hr) && pDisp)
*ppDisp = pDisp;
}
}
Carapee 2003-05-30
  • 打赏
  • 举报
回复
我这样做了,但是什么也没有发生,浏览器内容没有变化,也没有弹出窗口。
单步跟踪运行轨迹正常,清高手指点!

BEGIN_EVENTSINK_MAP(CPortalDlg, CDialog)
ON_EVENT(CPortalDlg, IDC_WEBBROWSER_ALFA, 251, OnWebBrowserNewWindow2, VTS_PDISPATCH VTS_PBOOL)
END_EVENTSINK_MAP()

void CPortalDlg::OnWebBrowserNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel)
{
// TODO: Add your message handler code here
LPUNKNOWN lpUnknown = this->m_pWebBrowserForeground->GetControlUnknown();
LPDISPATCH lpDispatch;
if (SUCCEEDED(lpUnknown->QueryInterface(IID_IDispatch, (void**)&lpDispatch)))
{
*ppDisp = lpDispatch;
*Cancel = FALSE;
}
else
{
*Cancel = TRUE;
}
}
叶子哟 2003-05-30
  • 打赏
  • 举报
回复
这是vb的:
Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)
Set ppDisp = WebBrowser1.Object
End Sub
应该意思差不多吧
蒋晟 2003-05-30
  • 打赏
  • 举报
回复
set ppDisp to the existing webbrowser object will result page to be opened in the same window
叶子哟 2003-05-30
  • 打赏
  • 举报
回复
这么分析:
如果有这个事件,将target="_self" 写进html文档中,用put_target
Carapee 2003-05-30
  • 打赏
  • 举报
回复
UP
Carapee 2003-05-27
  • 打赏
  • 举报
回复
UP
kingcom_xu 2003-05-26
  • 打赏
  • 举报
回复
我在msdn2001中没找到NewWindow的说明,在2003有,不过好像不对,2003是这样
void NewWindow( IDispatch **&ppDisp,
VARIANT_BOOL *&Cancel
);

在VB中却是如下
Private Sub a_NewWindow(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Processed As Boolean)

End Sub

我用VB试过,可以达到目的,在VC下可能得用自己连接点来实现了,比较麻烦,我目前知道的实现这种效果的就只有NewWindow,如果不采用这种方法的话,得等高手来了.

Carapee 2003-05-26
  • 打赏
  • 举报
回复
非常感谢!

但是还有问题:
1)VC中没有办法实现NewWindow事件,而且MSDN中说明的NewWindow事件的参数中也没有URL。
2)NewWindow事件是被荒废了的事件,就算能用,用它也不爽啊。

恳请继续指点。
Carapee 2003-05-26
  • 打赏
  • 举报
回复
matq2008(叶子.net) :
你好像没有明白我的意思,我是要让新的窗口的内容,在原来的窗口显示。原来的内容不要了。你说得好象是反了。
kingcom_xu 2003-05-26
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1555/1555235.xml?temp=.6381189
kingcom_xu 2003-05-26
  • 打赏
  • 举报
回复
如果想新弹出自已的一个窗口的话很简单,如果想还在原来的窗口的显示的话,有一个BUG,就是当网页像CSDN的首页一样会用javascript弹出窗口,那么道页就加载不完了,中途被改为那个弹出的窗口.

而且好像在newWindow2中没法在原来的窗口的显示,
以前试过得用NewWindow,NewWindow事件有一URL参数,得到后用Navigate方法将当前窗口的webbrowser导航到这个URL
叶子哟 2003-05-26
  • 打赏
  • 举报
回复
转抄:当网页通过脚本语句Window.open()打开新的连接时,这时候IE建立新的窗口用来浏览那个连接,并且不能阻止IE建立那个窗口,否则浏览操作将被取消。既然不能阻止,就让它建立吧(昨晚只记得想办法如何阻止IE建立新窗口,导致无法实现诺言,遗憾!!!),★★★只是在那个新的窗口显示之前关闭它★★★,这时候已经得到新窗口将准备浏览的那个连接URL,然后再调整其浏览方式就OK了。★注★:因为Window.open()总是建立一个新的窗口,所以只有浏览方式为"在当前网页打开"时上面代码才有意义,如果浏览方式不是这种类型,程序不做任何操作。
Carapee 2003-05-26
  • 打赏
  • 举报
回复
jiangsheng(蒋晟.Net)
我现在就是这样做的。很麻烦,希望能有更好的办法。
蒋晟 2003-05-26
  • 打赏
  • 举报
回复
你不会在NewWindow的时候做个标记,在BeforeNavigate的时候检察这个标记?

3,055

社区成员

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

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