我们在Delphi中使用标准的TWebbrowser组件,它在内部使用mshtml.dll。另外,我们使用注册表来确保使用新的呈现引擎(Web-Browser-Control-Specifying-the-IE-Version,MSDN: FEATURE_BROWSER_EMULATION)呈现页面。所以我们使用IE 10的渲染,但我们有相同的结果,即8到11。
使用MSHTML(IE7)的标准渲染机可以正常工作,但由于新的渲染选项,我们需要新的MSHTML渲染。
我们使用控件的设计模式使用户能够对文档进行更改:
var
mDocument: IHTMLDocument2;
begin
mDocument := ((ASender as TWebBrowser).Document as IHTMLDocument2);
mDocument.designMode := 'on';
现在我们遇到以下问题: 当我们使用IHTMLTxtRange.pasteHTML(...)插入HTML代码时,某些空格会被& nbsp;
取代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标记之间的空格已转换为&amp; nbsp;。 错误插入的HTML代码是:
<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><BR>
<P>Falsche Umbrueche <BR>wo keine sein sollten 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 Leerzeichen</P></BODY></HTML>
答案 0 :(得分:2)
这可能是设计上的。符合HTML specifications,HTML代码中的任何空格都应被视为空格的单个实例(<pre>
标记内除外)。要在设计模式下键入两个或多个空格时提供额外的单词分隔,IE会插入
HTML实体。