在WebBrowser控件的IDocHostUIHandler::GetHostInfo() 方法中,针对IE7以及以上版本,新支持了DOCHOSTUIFLAG_HOST_NAVIGATES、DOCHOSTUIFLAG_ENABLE_REDIRECT_NOTIFICATION、DOCHOSTUIFLAG_USE_WINDOWLESS_SELECTCONTROL、DOCHOSTUIFLAG_USE_WINDOWED_SELECTCONTROL等几个新的标志位。其中DOCHOSTUIFLAG_HOST_NAVIGATES 标志位一定要慎用。经测试后发现,某些情况下该标志位会引起WebBrowser"停止响应"问题。
具体表现如下:
1) 设置该标志位后,对于通过脚本设置窗体大小位置的情况,相应事件将不会被触发。具体包括DWebBrowserEvents2中的WindowSetHeight、WindowSetLeft、WindowSetTop、WindowSetWidth 等事件。如果您想通过捕捉DWebBrowserEvents2的一系列事件来控制通过脚本中类似window.open() 产生的新窗体时。以上事件将不会通知即将创建的窗体大小和位置;
2) 设置该标志位后,若在NewWindow2、NewWindow3中设定Cancel = true;那么会使WebBrowser进入"假死"状态,该状态的表现就是,在上次Cancel = true;取消创建新窗体的操作后,再次导航其它页面,WebBrowser将不会有任何的事件通知,并且WebBrowser也不会真正执行导航操作。当再次导航(调用Navigate或Navigate2方法)时才会恢复正常;
对于WebBrowser这个神物,没事儿还是不要乱设Flag的好。