我想添加另一个 MSHTML 问题。感谢所有回复。
我们在 Delphi 中使用标准的 TWebbrowser 组件,该组件在内部使用 mshtml.dll。另外,我们使用注册表来确保页面使用新的渲染引擎(Web-Browser-Control-Specifying-the-IE-Version,MSDN:FEATURE_BROWSER_EMULATION)进行渲染。因此,我们使用 IE 10 的渲染,但使用 ie 8 到 ie 11 的结果相同。
使用标准的 MSHTML (IE7) 渲染机器可以正常工作,但是由于新的渲染选项,我们需要新的 MSHTML 渲染。
我们使用控件的设计模式来使用户能够对文档进行更改:
var
mDocument: IHTMLDocument2;
begin
mDocument := ((ASender as TWebBrowser).Document as IHTMLDocument2);
mDocument.designMode := 'on';
现在我们遇到了以下问题:我们通过 IPersistStreamInit.Load(...) 将以下(简化的)HTML 加载到 WebBrowser 中:
<html>
<body>
What should I do
with some of the
spaces.
</body>
</html>
在 WebBrowser 用户可以看到以下内容:
现在,当在编辑模式下在 WebBrowser 中选择单词“with”并键入一个字符时,会出现一些空格。HTML 现在有 在其中 - 与编辑前 HTML 中的空格一样多:
代码是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv="Content-Type" content="text/html; charset=unicode">
<META name="GENERATOR" content="MSHTML 10.00.9200.16540"></HEAD>
<BODY> What should I do n some of the spaces.
</BODY></HTML>
通过替换 WebBrowser 中的“空格”一词可以达到相同的效果。
对于使用我们的应用程序的用户来说,这是一种不好的行为。
每个文本前面有空格的 HTML 代码都有相同的行为。麻烦的是,MSHTML 本身会生成这样的 HTML。
现在我们想到了一个解决方案来删除每行左侧的所有空格,但我们认为这样的解决方法可能会导致更大的混乱,因为它们会改变 HTML。这可能会导致渲染的一些不同行为。