Javascript上下文菜单单击事件/检测-筛选粘贴内容

Javascript上下文菜单单击事件/检测-筛选粘贴内容,javascript,jquery,cross-browser,dom-events,Javascript,Jquery,Cross Browser,Dom Events,场景:我试图截获文本区域/输入文本中的粘贴事件,并过滤正在粘贴的内容 Webkit/IE处理得相当好,因为我可以将代码附加到onpaste事件,然后从剪贴板读取要粘贴的内容。当然可以 Gecko比较棘手,因为据我所知,在Firefox上读取剪贴板内容是不可能的(除非有人知道解决方法? 我只是使用输入交换技巧 歌剧很烦人。我可以捕获CTRL+V和SHIFT+INS,但没有onpaste事件。 显然,更不用说任何形式的剪贴板交互了 所以,我的问题是: 我是否可以检测到用户是否在Opera的上下文菜单

场景:我试图截获文本区域/输入文本中的粘贴事件,并过滤正在粘贴的内容

Webkit/IE处理得相当好,因为我可以将代码附加到
onpaste
事件,然后从剪贴板读取要粘贴的内容。当然可以

Gecko比较棘手,因为据我所知,在Firefox上读取剪贴板内容是不可能的(除非有人知道解决方法?
我只是使用输入交换技巧

歌剧很烦人。我可以捕获CTRL+V和SHIFT+INS,但没有
onpaste
事件。
显然,更不用说任何形式的剪贴板交互了

所以,我的问题是:

我是否可以检测到用户是否在Opera的上下文菜单中单击了粘贴?是否有其他方法检测该事件?

编辑:

感谢大家的回答-他们都添加了很好的输入,即使没有确定的解决方案。
不得不选择,我将选择唯一一个试图解决原始问题的,如果这不是一个太多的黑客甚至尝试,这可能会起作用

对于有相同问题(输入筛选)的用户,请注意:

  • 可以捕获被拖动的内容:
    mouseup
    +
    setTimeout
    几乎完美地完成了所有操作
  • 如果没有flash,可能就没有解决方案。即使使用flash,它也不是完全的固溶体。为了支持100%的案例,付出了太多的努力

    • 我去年遇到了这个问题。简言之,没有


      最后,我使用了一个onchange处理程序,并在内容粘贴到文本框后对其进行过滤

      您可以使用
      bind('paste',function(){})通过jQuery截取粘贴,比较粘贴前后的字符串并应用格式

      以下内容在IE7/FF3.6/Chrome/Safari 5中进行了测试

      $("#textarea").bind('paste', function(e){ 
          // Do whatever you needed to do with the code here.
      });
      
      现场示例

      编辑方法如下:

      $("#textarea").bind('paste', function(e){ 
          var oldText = this.value;
          setTimeout(function() { 
              // Compare oldText to $("#textarea").val() and format accordingly.
          }, 1000);
      });
      
      Edit 2鉴于您对原始帖子的修订,如果您担心的是Opera,您将不得不使用
      setInterval()
      监控文本框的值,并将其与自身进行比较以了解更改情况


      最终,脚本始终会有一种解决方法,即使是上面的示例也很容易将文本从另一个文本框(或地址栏)拖动到脚本中,而不会触发上面定义的
      粘贴事件

      我想指出DOJO菜单小部件,它可以在不同的浏览器中完美地创建上下文菜单

      您可以在支持粘贴事件的浏览器中检测粘贴事件,并在不支持此事件的浏览器(如opera)中覆盖上下文菜单

      创建自己的上下文菜单后,可以添加“复制粘贴”菜单项或使用css创建与默认菜单类似的上下文菜单

      已编辑 某些浏览器可能不允许我们获取剪贴板内容,在这种情况下,我们可以随时恢复到flash,以借用其跨浏览器的一些功能。请参阅我在评论中发布的两个链接


      它的完整实现可能会有比预期更多的问题,但这是可能的,我们可以尝试一下(我肯定会尝试)。

      这个问题的答案是简单的否。没有粘贴事件的主要浏览器是Opera和Firefox 2的最新版本。如果没有粘贴事件,则需要找到一个替代事件或一组事件,以便在粘贴实际发生时从上下文菜单中检测粘贴。您可以为存在的每个事件添加处理程序(我已经这样做了),当用户从上下文菜单触发粘贴时,您在相关浏览器中什么也得不到


      这只会定期轮询文本输入的值,这是两码事。您可以跟踪按键操作,并在轮询代码中观察到文本输入的值已通过键盘输入以外的其他方式发生了更改,并进行了区分,但这是不可靠的。我对粘贴事件使用setTimeout。但对于上下文菜单,选择“无任何效果”(如上所述)。我将mousemove绑定到触发update函数的输入表单。然后解除绑定/绑定,这样它们就不会堆积起来

      这将处理上下文菜单选择并将值拖动到输入字段

      如果您的表单很小,比如说只有一个输入字段,并且从关联菜单中选择后鼠标不会落在它上面,请绑定到表单的父项或文档。当然,它必须等待鼠标移动,但这是从上下文菜单中选择后的一般用户操作


      很好。

      +1教我突出显示键盘操作的标签:-)在没有粘贴事件的浏览器中,答案是“不,赏金或不赏金”。我见过非常聪明的黑客,他们让大多数人认为不可能的事情发生。以库丰为例。或者其他几十种变通方法,它们实现了我们现在认为理所当然的东西。我问的一种方法是轮询输入,但这是一种我宁愿避免的解决方案,因此我的问题(和赏金)是看是否有人提出了更好的方案。我明白你的观点,但Cufon实际上无法与此相比。你的问题的答案仍然是否定的。如果当用户点击上下文菜单中的
      paste
      时没有触发任何事件(例如,Firefox 2中没有),那么就没有什么东西可以用来检测粘贴。你所能依靠的就是轮询输入的值。+1表示正确。没有一个答案能像一个简单的答案那样获得更少的选票。我已经知道有一个关于粘贴事件fox gecko/IE/webkit,如果你读了我的问题和