0

我正在为nicEdit编写一个扩展,这将导致所有粘贴的富文本都被粘贴为纯文本。我的代码在 Chrome 和 IE7 中完美运行,但在 Firefox 3 中失败(可能还有 Firefox 2,但出于不同的原因 - 特别是缺少粘贴事件)。

奇怪的是,当粘贴的文本是纯文本时,我的代码可以完美运行。它似乎窒息任何格式。以下是 Firefox 版本中涉及的步骤,这些步骤在粘贴时触发(事件正在触发,但粘贴失败):

  • 获取当前选择和范围
  • 用 新建一个 divcontentEditable = 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.prototypenicEdit 中似乎也有一些修改,我觉得很奇怪
  • 我可以使用另一个富文本编辑器,但将其视为调试练习
  • 上面链接的代码仅适用于 Firefox
4

1 回答 1

1

问题是粘贴事件在某些浏览器(包括 Firefox)中重定向插入符号为时已晚。Ctrl如果您拦截用于粘贴的键盘快捷键( + VCmd+VShift+ )并忽略粘贴事件,您将能够执行插入符号重定向技巧Insert,但这意味着不包括由上下文和编辑菜单触发的粘贴。但是,我认为这是您能做的最好的事情。

于 2011-01-06T00:32:46.260 回答