Firefox不支持contenteditable="plaintext-only",仅识别"true"/"false"布尔值,该属性是Chrome/Edge的非标准扩展;需通过监听paste事件、拦截格式命令等方式手动实现纯文本编辑。

Firefox 是否支持 contenteditable="plaintext-only"
不支持。Firefox 完全忽略 contenteditable="plaintext-only",它只识别布尔值形式的 contenteditable(即 "true" 或 "false"),对任何其他字符串值(包括 "plaintext-only")都当作 "true" 处理。
为什么 Firefox 不认这个值?
因为 contenteditable="plaintext-only" 是 Chrome/Edge 98+ 引入的非标准扩展,并未纳入 HTML 规范,也未被 Mozilla 接受。Firefox 当前(截至 128)仍严格遵循旧版规范:仅将空字符串、"true" 视为启用,"false" 为禁用,其余均为无效值并 fallback 到 true。
如何在 Firefox 中实现纯文本编辑效果?
必须手动拦截富文本粘贴与格式化行为,不能依赖属性本身。常见做法包括:
监听 paste 事件并清理 HTML:
element.addEventListener('paste', (e) => {
e.preventDefault();
const text = (e.clipboardData || window.clipboardData).getData('text/plain');
document.execCommand('insertText', false, text);
});
禁用格式化命令(如加粗、缩进等):
- 在
input或keydown中拦截Ctrl+B/Ctrl+I等快捷键 - 重写
document.execCommand(注意:该 API 已废弃,但仍是当前最兼容的拦截点) - 对
input后的内容做正则清洗:element.innerHTML = element.textContent(需防闪烁)
要不要用 contenteditable="plaintext-only" 做渐进增强?
可以,但必须带降级逻辑:
- 先检查是否支持:
if ('plaintext-only' in document.createElement('div').contentEditable)—— 实际上这个检测永远为false,因为 Firefox 根本不解析该值 - 更可靠的做法是 UA 检测或特性测试粘贴后是否保留 HTML:
const testEl = document.createElement('div'); testEl.contentEditable = 'plaintext-only'; console.log(testEl.contentEditable === 'plaintext-only')—— 在 Firefox 中输出"true",说明它被转成了布尔真值 - 结论:不要依赖该属性的存在性判断,所有浏览器都应走 JS 降级路径
真正麻烦的不是属性不生效,而是开发者误以为设了就一劳永逸,结果在 Firefox 里粘贴 Word 表格照样崩 layout。

















