我正在为nicEdit编写一个扩展,这将导致所有粘贴的富文本都被粘贴为纯文本。我的代码在 Chrome 和 IE7 中完美运行,但在 Firefox 3 中失败(可能还有 Firefox 2,但出于不同的原因 - 特别是缺少粘贴事件)。
奇怪的是,当粘贴的文本是纯文本时,我的代码可以完美运行。它似乎窒息任何格式。以下是 Firefox 版本中涉及的步骤,这些步骤在粘贴时触发(事件正在触发,但粘贴失败):
- 获取当前选择和范围
- 用 新建一个 div
contentEditable = true
并将其添加到 DOM - 将插入符号移动到新的 div
- 设置超时以从新 div 获取 HTML,清理它,并将其放入旧选择中(我在步骤 1 中抓取)
- return true(允许原始粘贴完成,将内容粘贴到新的 div 中)
似乎所有这些步骤都已执行,但粘贴从未发生。我在控制台中没有收到任何错误(只是一个与解析错误有关的警告text-align
- 声明被删除),并且当我使用 Firebug 进行调试时没有任何可疑的事情发生(除了我的粘贴似乎是空的,这就是问题所在)。
该警告让我认为 Firefox 可能无法解析我一直在粘贴的内容,但如果没有我的拦截代码,我可以很好地粘贴到 nicEditor 中。
我已经在http://www.ryankinal.com/paste/firefox.html上传了我的 Firefox-only 测试脚本——这是 Firefox 从我的完整扩展中执行的代码。
有几点需要注意:
- 我从 TinyMCE 粘贴插件中获得了相当多的灵感
- 我正在使用一些 jQuery 进行元素选择
Function.prototype
nicEdit 中似乎也有一些修改,我觉得很奇怪- 我可以使用另一个富文本编辑器,但将其视为调试练习
- 上面链接的代码仅适用于 Firefox