我最近一直在 HTML5 页面中使用 contenteditable,并且在将它与某些元素一起使用时遇到了错误,我想知道在哪里以及如何真正安全地使用它。
我发现使span元素 contenteditable 会导致 Firefox 1和 Chrome 2中出现一些错误行为。但是,使div或部分内容可编辑看起来完全安全3。
一些人提到的一个指导方针是,只有块级元素应该是可内容编辑的。但是,Mozilla 开发者网络将标题元素h1到h6列为块级元素,并且在 Firefox 4中将标题元素设置为 contenteditable 是有问题的,并且可能会使 Chrome 5中的页面崩溃。
我希望能够使用的不仅仅是 div 和部分,但我不清楚我实际上可以安全地使哪些元素可编辑。安全,我的意思是在正常条件下使用元素,我应该能够执行正常的编辑任务,而不会做意外或错误的事情。我应该能够在其中写入、删除内容、剪切、复制、粘贴和移动我的文本光标并突出显示文本,而不会出现意外或奇怪的行为。
那么,我可以真正安全地使哪些元素可编辑?有具体的分类吗?安全内容可编辑元素是否必须匹配某些标准?
错误说明:
- Firefox 21 w/ span:如果文本光标被带到元素的开头或结尾,元素会失去焦点,但如果它通过删除内容到达那里则不会。突出显示元素的一部分,剪切然后粘贴将在该点将元素一分为二,然后在两个部分之间插入一个空白元素 -而实际上不会将您试图粘贴的文本放在任何地方。
- Chrome 27 w/ span:如果 span 覆盖多行,例如通过自动换行,剪切和粘贴内容通常会在粘贴的内容后插入换行符。
- 除非您使 div 显示:内联,在这种情况下,它仍然可以像 1 中那样失去焦点,但显然只有当您将文本光标带到末尾时。不过,我不认为元素的这种“正常”用法。
- Firefox 21 带标题:选择部分内容然后剪切和粘贴将与 1 类似,在该点将标题元素一分为二,并在两半之间插入第三个标题元素。至少,它会在其中包含您粘贴的内容,但是现在您在原来有一个标题元素的地方有了三个标题元素。
- Chrome 27 带标题:选择一些内容并剪切和粘贴。页面崩溃。你会得到一个“Aw snap!” 信息。就是这样。
演示代码
这是重现上述内容的演示。这很简单,但目前唯一没有重现的是失去焦点的错误。
[contenteditable=true] {
border: 1px dotted #999;
}
<article style="width: 100px">
<h1 contenteditable="true">Heading</h1>
<p>
<strong>Some adjacent content</strong>
<span contenteditable="true">Span! This is long enough it will spread over multiple lines.</span>
</p>
<div style="display: inline" contenteditable="true">An inline div also with multiple lines.</div>
</article>