如何在javascript中手动触发`paste`事件?

时间:2018-07-18 06:53:34

标签: javascript html

我有一个事件监听器,它监听ctrl - v粘贴事件。在侦听器内部,我使用clipboardData.getData方法从剪贴板获取复制的数据。但是现在我需要实现一个按钮,当用户单击该按钮时,它会执行复制逻辑。我的问题是如何以编程方式触发粘贴事件。我需要获取的主要内容是clipboardData实例。

下面的代码是我当前的paste事件监听器。我需要模拟e粘贴事件,以使按钮正常工作。

myDom.on('paste',function(e) {
    e.preventDefault();
    var data = (e.originalEvent || e).clipboardData.getData('application/image');

});

2 个答案:

答案 0 :(得分:4)

  

我的问题是如何以编程方式触发粘贴事件。

您不能在没有特殊设置的浏览器允许它的情况下进行操作(我不知道该设置是否可行,并且无法在Firefox或Chrome的设置中立即找到它)用户启用该设置。如果可以,那将是一个重大的安全问题,因为您的网页可能会窥探用户剪贴板的内容。这就是为什么您只能从剪贴板事件的事件对象中获取剪贴板数据的原因。

来自the specification

  

11.1。隐私权和剪贴板事件API

     

剪贴板事件API允许在剪贴板事件处理程序的上下文中运行的脚本访问系统剪贴板的副本,并可能修改正在写入剪贴板的数据。

     

关于保护剪贴板事件API访问的数据,用户代理应了解以下要求:

     
      
  • 实现DataTransfer接口以返回剪贴板数据的对象必须在提供数据的ClipboardEvent事件处理程序之外不可用。

  •   
  • 如果脚本存储对实现DataTransfer接口的对象的引用以从ClipboardEvent事件处理程序之外使用,则所有方法 都必须在操作外部被禁止使用预期的上下文。

  •   
  • 实施方式绝不能让脚本创建合成剪贴板事件来访问真实的剪贴板数据(除非用户已对其进行配置)。 p>

  •   
     

即使剪贴板事件API不受剪贴板权限的限制,用户代理仍可以选择为用户提供一种方法来禁用此API或配置允许哪些站点访问它。

(我强调第三个要点)

请注意,规范确实会说“ ”,除非用户已配置为“ ”。但同样,我不知道允许用户这样做的浏览器。 (只是网站是否完全可以看到剪贴板事件。)

答案 1 :(得分:0)

window.clipboardData.getData('Text');可能在某些浏览器中有效,是某些浏览器会提示用户是否希望访问剪贴板数据。