0

我已经将网页嵌入到 win forms 应用程序中。出于我的目的,我使用Web 控件。当要创建新的浏览器实例时,我处理 NewWindow3 事件并使用单独的 Web 浏览器控件创建新表单并将其作为 ppDisp 参数传递。我面临的问题是从 NewWindow3 事件创建的浏览器具有文档模式 5,这是我机器上所有 IE 引擎中最低的。不明白为什么会这样,我该如何解决?

4

1 回答 1

0

Delphi 5 中的 TEmbeddedWB 组件(TWebbrowser VCL 组件的扩展版本)长期以来一直存在完全相同的问题。我过去已经做了很多研究,但没有结果。但是今天我经过大约 3 个小时的研究和反复试验找到了解决方案。TEmbeddedWB 有一个公共过程“AssignEmptyDocument”,实现如下:

procedure TEmbeddedWB.AssignEmptyDocument(bWait: Boolean = False);
begin
  Navigate('about:blank');
  if bWait then
    Wait;
end;

在分配 ppDisp 之前,我必须执行此过程。这是我在 Delphi/Object pascal 中的简化解决方案:

procedure Tfrm_browser.EmbeddedWBNewWindow3(ASender: TObject; var ppDisp: IDispatch;
  var Cancel: WordBool; dwFlags: Cardinal; const bstrUrlContext,
  bstrUrl: WideString);
var popup: Tfrm_popup;
begin   
  Application.CreateForm(Tfrm_popup, popup);
  popup.EmbeddedWB.AssignEmptyDocument;
  ppDisp := popup.EmbeddedWB.Application;
end;

在我的情况下,弹出窗口的 documentMode 之后是“9”,正如预期的那样。因此,只需尝试执行“Navigate('about:blank');” 在分配 ppDisp 之前。就我而言,它就像一个魅力。

这种行为的原因我不知道,对不起......

于 2014-06-03T11:17:26.963 回答