方案标签: 我的web应用程序允许用户输入和发送电子邮件:如何强制浏览器DOMDocument.ExecCommand()函数注入默认字体
<div contenteditable="true">User can type email contents here</div>
虽然他们正在撰写自己的电子邮件,他们有突出显示某些文本的能力,以及选择一种新字体以将该文本更改为。实现的方式是调用DOMDocument对象上的ExecCommand命令,以允许浏览器将此字体样式应用于突出显示的文本。
domDocument.ExecCommand("fontname", false, "Arial Black");
大多数浏览器应用此字体改变是注入一个标签到DOM周围高亮文本的方式:
<font face='Arial Black'> highlighted text here </font> Here is some more text that was not highlighted.
也能正常工作的所有字体,除了浏览器的默认字体(” Times New Roman“(大多数浏览器)。如果我突出显示一些文本并选择“Times New Roman”,我注意到IE9 +已经进行了优化,以实现这种字体已经在'Times New Roman'中(因为它是默认的浏览器字体),并且不注入多余的标签放入DOM中。当电子邮件仍显示在当前浏览器中时,这很好,因为字体默认为“Times New Roman”。但是,当电子邮件发送并在另一个客户端打开时,标记不会随电子邮件一起发送,因为它从未注入到DOM中,因此呈现电子邮件的客户端可以使用它想要的任何默认字体,这是不必要的。新罗马'。
我创建了一个JSFiddle来显示这个问题。请参阅使用代码注释: http://jsfiddle.net/8xq4dpb2/1/
有没有人有任何想法将字体信息干净地注入页面?或者是手动“破解”DOM以包含此信息的唯一选择?
谢谢!
感谢您的示例。我认为你稍微误解了我的问题。我希望能够突出显示文本的一个子集,然后仅在该确切文本上更改字体。这很棘手,因为没有必要使用DOM元素来包装这些文本,因此需要注入。 domDocument.ExecCommand提供了这个功能,但是在我上面的场景中,似乎在默认的字体大小写中失败了。 – 2015-02-10 22:28:17
所以如果你用span选择文本,那么你的工作会做什么? – PRAH 2015-02-10 22:29:26
此外,为了解决您的问题: 1)是跨度更好,但标记由浏览器本身添加。不是我的实现。 2)这在一般情况下,但如上所述,我不想风格整个。只有用户突出显示的子文本集。 3)是的,这会更好。因为我的问题不是onClick事件 – 2015-02-10 22:29:41