gpt4 book ai didi

delphi - MSHTML PasteHTML() 产生

转载 作者:行者123 更新时间:2023-12-03 15:32:10 26 4
gpt4 key购买 nike

我们在 Delphi 中使用标准 TWebbrowser 组件,该组件在内部使用 mshtml.dll。另外,我们使用注册表来确保页面使用新的渲染引擎( Web-Browser-Control-Specifying-the-IE-VersionMSDN: 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';

现在我们遇到了以下问题:当我们使用 IHTMLTxtRange.pasteHTML(...) 插入 HTML 代码时,一些空格被替换为  

procedure TForm1.BT_PasteHtmlClick(Sender: TObject);
var
mDoc2: IHTMLDocument2;
mOvSel:IHTMLSelectionObject;
mRange: IHTMLTxtRange;
mHtml: string;
begin
/// Reproduzierbarer Fehler bei PasteHtml
/// Leere Zellen und falsche Umbrüche.
mDoc2 := WB_Test.Document as IHTMLDocument2;

mOvSel := mDoc2.selection as IHTMLSelectionObject;
mRange := mOvSel.CreateRange() as IHTMLTxtRange;

mHtml := '<TABLE width="100%" border="1" cellspacing="0" cellpadding="0"> <TBODY> <TR> <TD>Falsche Zellen werden erstellt, wo nur diese eine sein sollte!</TD></TR></TBODY></TABLE>' + sLineBreak +
'<p>Falsche Umbrueche ' + sLineBreak +
'wo keine sein sollten durch CRLF im Html-Code!</p>' + sLineBreak;
mRange.pasteHTML(mHtml);
end;

查看插入的代码,TABLE、TBODY、TR 和 TD 标记之间的空格已转换为  。错误插入的HTML代码是:

<TABLE width="100%" border="1" cellspacing="0" cellpadding="0">&nbsp; 
<TBODY>&nbsp;
<TR>&nbsp;&nbsp;&nbsp;
<TD>Falsche Zellen werden erstellt, wo nur diese eine sein
sollte!</TD></TR></TBODY></TABLE><BR>
<P>Falsche Umbrueche <BR>wo keine sein sollten&nbsp; durch CRLF im
Html-Code!</P>

编辑:我们从以下 HTML 开始:

<html>
<body>
</body>
</html>

插入后得到:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1252">
<META name="GENERATOR" content="MSHTML 10.00.9200.16540"></HEAD>
<BODY>
<TABLE border="1" cellspacing="0" cellpadding="0">
<TBODY>
<TR>
<TD>Tabelle mit<BR>einem Text!</TD></TR></TBODY></TABLE><BR>
<P>Falsche Umbrüche durch zu viele&nbsp; Leerzeichen</P></BODY></HTML>

最佳答案

这可能是设计使然。符合HTML specifications ,HTML 代码中的任何空格都应被视为单个空格实例(<pre> 标签内除外)。为了在设计模式下键入两个或多个空格时提供额外的单词分隔,IE 会插入 &nbsp;相反,HTML 实体。

关于delphi - MSHTML PasteHTML() 产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27018242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com