【问题标题】:Rich text paste fails in firefox when using OnPaste使用 OnPaste 时,Firefox 中的富文本粘贴失败
【发布时间】:2011-01-05 20:35:43
【问题描述】:

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

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

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

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

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

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

需要注意的几点:

  • 我从 TinyMCE 粘贴插件中获得了很多灵感
  • 我正在使用一些 jQuery 进行元素选择
  • nicEdit 中的Function.prototype 似乎也有一些修改,我觉得很奇怪
  • 我可以使用另一个富文本编辑器,但将其视为调试练习
  • 上面链接的代码仅供 Firefox 使用

【问题讨论】:

  • 你能分享你的代码吗?我也有同样的问题

标签: javascript firefox richtextbox paste nicedit


【解决方案1】:

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

【讨论】:

  • 我认为情况并非如此。当我粘贴纯文本时,代码运行良好,但在格式化文本上失败。不幸的是,要求粘贴纯文本有点违背目的。
  • 这肯定是我上次研究时的情况,大约是一年前。有可能特定类型的粘贴(例如纯文本)可能有效,而富文本可能无效(这不是我观察到的,但后来我没有测试它),但总的来说,我很确定粘贴事件简直太晚了。如果您不相信我,请查看 CKEditor 或 TinyMCE 源代码。
  • 我想这是唯一的解释。
猜你喜欢
  • 2020-08-29
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2013-11-01
  • 2022-06-23
  • 1970-01-01
相关资源
最近更新 更多