如何在JavaScript中手动触发“paste”事件?

15

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

以下代码是我当前的 paste 事件监听器。为了使按钮起作用,我需要模拟 e 粘贴事件。

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

});

你能提供一些你当前的逻辑和脚本吗? - DomeTune
我已经更新了我的代码。 - Joey Yi Zhao
2个回答

13
我的问题是如何在程序中触发粘贴事件。 除非浏览器设置特殊选项允许它(我不知道有哪个浏览器这样做,并且无法立即在Firefox或Chrome的设置中找到它),否则您不能这样做,而且用户需要启用该设置。如果可以的话,这将是一个重大的安全问题,因为您的网页可能会窥探用户剪贴板的内容。这就是为什么您只能从剪贴板事件的事件对象中获取剪贴板数据的原因。 来自规范
11.1. 隐私与剪贴板事件 API
剪贴板事件 API 允许在剪贴板事件处理程序上下文中运行的脚本访问剪贴板的副本并潜在地修改要写入剪贴板的数据。
用户代理应注意以下要求,以确保通过剪贴板事件 API 访问的数据得到保护:
- 实现 DataTransfer 接口以返回剪贴板数据的对象“不得”在提供数据的 ClipboardEvent 事件处理程序之外可用。 - 如果脚本存储对实现 DataTransfer 接口的对象的引用以从 ClipboardEvent 事件处理程序之外使用,则在调用所有方法时必须是无操作的。 - 实现“不得”让脚本创建合成剪贴板事件来获取访问真实剪贴板数据的权限(除非用户配置允许)。
即使剪贴板事件 API 没有受到剪贴板权限的限制,用户代理也可以选择提供一种方法让用户禁用此 API 或配置允许哪些站点访问它。
需要注意的是,规范确实说“除非用户已配置”,但我不知道有哪个浏览器会让用户这样做。(只能设置网站是否能够看到剪贴板事件。)

2
我仍需要实现一个带有“粘贴”选项的自定义上下文菜单。你能给一些指针来实现粘贴功能吗? - Sнаđошƒаӽ
1
@Sнаđошƒаӽ - 问题应该以问题的形式发布。但是顺便说一下:https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Using_the_clipboard 注意它必须是响应用户操作的(但您弹出的某个DOM元素上的单击应该符合要求)。 - T.J. Crowder

4

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接