0

以下过程适用于 Windows XP、7-32、7-64、8-32、8-64,IE 8 至 11 版本不适用于新的 Windows 10,请参阅代码:

try
  IDoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
  IDoc.Write(PSafeArray(VarArrayAsPSafeArray(VarArrayOf([xHtml])))); //Error windows 10
  IDoc.Close;
except
  on E: Exception do
   begin
    //E.ClassName = EOleException
    //E.Message = Unspecified error
   end;
end;

xHtml是一个包含 HTML 的字符串"<html>...</html>"

我也尝试以这种方式编写 IHTMLDocument2 ,但出现了同样的错误:

IDoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
v := VarArrayCreate([0, 0], VarVariant);
v[0] := xHtml;
IDoc.Write(PSafeArray(TVarData(v).VArray));
IDoc.Close;

我还检查了 Windows 10 中是否有一个mshtml.dll,并且有。

4

2 回答 2

1

我在使用 XE8 的 Win10 64 位上尝试了你的两个示例。

try
  IDoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
  IDoc.Write(PSafeArray(VarArrayAsPSafeArray(VarArrayOf([xHtml])))); //Error windows 10
  IDoc.Close;
except
  on E: Exception do
   begin
    //E.ClassName = EOleException
    //E.Message = Unspecified error
   end;
end;

IDoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
v := VarArrayCreate([0, 0], VarVariant);
v[0] := xHtml;
IDoc.Write(PSafeArray(TVarData(v).VArray));
IDoc.Close;

并且两者都执行而不会引发任何异常。所以看起来问题是特定于您的系统的,如果是,这个 q 可能应该被关闭。

Fwiw,下面的代码也可以正常工作

procedure LoadWBFromString(WB : TWebBrowser; const S : String);
var
  Doc : IHtmlDocument2;
  V : OleVariant;
begin
  if WB.Document = nil then
    WB.Navigate('about:blank');
  Doc := WB.Document as IHTMLDocument2;
  V := VarArrayCreate([0, 0], varVariant);
  V[0] := S;
  Doc.Write(PSafeArray(TVarData(v).VArray));
  Doc.Close;
end;

procedure TForm1.LoadWB;
begin
  LoadWBFromString(WebBrowser1, Memo1.Lines.Text);
end;

并在 WebBrowser1 中正确显示来自 Memo1.Text 的最小 HTML 文档。

于 2015-08-19T08:12:12.390 回答
0

我发现问题只是键“FEATURE_BROWSER_EMULATION”,因为我在 Windows 10 中注册使用旧版本的 IE 时发生此错误,它只是删除了与我开始在 Windows 10 中运行的应用程序相关的键“FEATURE_BROWSER_EMULATION”,我'会做的是检查Windows的版本并且只在旧版本中注册密钥,感谢所有提示,我只能通过评论找到问题。

我记录的关键:“Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION”

值:4270841

于 2015-08-19T15:21:17.077 回答