使用OnPaste时,富文本粘贴在firefox中失败

时间:2011-01-05 20:35:44

标签: javascript firefox richtextbox paste nicedit

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

奇怪的是,当粘贴的文本是纯文本时,我的代码可以正常工作。它似乎扼杀了任何格式。以下是Firefox版本中涉及的步骤,这些步骤在粘贴时触发(事件触发,但粘贴失败):

  • 获取当前选择和范围
  • 使用contentEditable = true创建一个新div,并将其添加到DOM
  • 将插入符号移动到新div
  • 设置超时以从新div中获取HTML,清理它并将其放入旧选择中(我在步骤1中抓取)
  • 返回true(允许原始粘贴完成,将内容粘贴到新div中)

似乎所有这些步骤都已执行,但粘贴从未发生过。我在控制台中没有出现任何错误(只是与text-align上的解析错误相关的警告 - 声明被删除),并且当我使用Firebug调试时没有发生任何可疑行为(除了我的粘贴似乎是空的,这是问题)。

警告让我觉得Firefox可能无法解析我一直在粘贴的内容,但是如果没有我的拦截代码,我可以很好地粘贴到nicEditor中。

我已经在http://www.ryankinal.com/paste/firefox.html上传了我的仅Firefox测试脚本 - 这是Firefox从我的完整扩展程序执行的代码。

有几点需要注意:

  • 我从TinyMCE粘贴插件中获得了相当多的灵感
  • 我正在使用一些jQuery进行元素选择
  • 在nicEdit中似乎对Function.prototype进行了一些修改,我觉得很奇怪
  • 我可以使用其他富文本编辑器,但请将此视为调试
  • 上面链接的代码仅适用于FIREFOX

1 个答案:

答案 0 :(得分:1)

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