想做一游览器,看一般都有强制在新窗口打开链接的功能,也想加进去,BeforeNavigate2事件可以捕获到相应的链接,但问题是,我不能把这里所有的链接都放到一新窗口打开,比如打开“新浪”首页,这里便能检测到他的首页执行了多次这个事件,如果我每次都放到一个新的页面里,那打开一个新浪首页一下子会出来好几个,不知道大家明不明白我的意思,如何强制链接在新窗口打开,就象IE鼠标右键那样,又如何屏蔽弹出窗体,请指教。

解决方案 »

  1.   

    参考
    http://blog.csdn.net/jinjazz/archive/2007/11/24/1901192.aspx
      

  2.   

    多谢jinjazz,但一个页面BeforeNavigate2有时会调好几次,这种方法似乎不太好,有没有好的解决办法。
      

  3.   

    那可能因为页面有iframe的原因,你可以判断一下url是不是webbrowser的url
      

  4.   

    我估计也应该是框架的事,可我该怎么判断是不是webbrowser的url,JinJazz能再提示一下吗?
      

  5.   

    大概是
    if(e.Url==this.webbrowser.Url)
    {
    //....
    }
      

  6.   

    jinjazz,似乎不是那么回事,我很难判断是由于我的点击引发了BeforeNavigate2事件还是网页载入时自动触发了该事件,所以我很难强制判断是不是该弹出新窗口,是否还有别的办法?有没有办法调IE右键菜单的“在新窗口打开”这个事件
      

  7.   

    考虑user32.dll库中的FindWindowEx和SendMessage函数,用VS.IDE打开shdocvw.dll文件找到IE右键菜单的“在新窗口打开”的ID后向其发送消息         IntPtr vHandle = WebBroswer.Handle;
            vHandle = FindWindowEx(vHandle, IntPtr.Zero, "Shell Embedding", null);            ①
            vHandle = FindWindowEx(vHandle, IntPtr.Zero, "Shell DocObject View", null);      ②
            vHandle = FindWindowEx(vHandle, IntPtr.Zero, "Internet Explorer_Server", null);  ③
            SendMessage(vHandle, 0x111, IE右键菜单的“在新窗口打开”的ID, (int)vHandle);
    代码大概差不多就是上面的,至于②和第③行第二个参数中是不是上面的那样,比在网上搜一下或试一下就可以了