如何粘贴点击? 它适用于谷歌文档

我希望能够在用户点击时启动真正的粘贴事件。 我可以理解这可能是一个安全问题,因为如果任何网页有权访问用户剪贴板,那就不好了。 所以我认为所有浏览器都不允许访问剪贴板数据。

但是例如在谷歌文档(在类似文字的应用程序中),我可以从自定义上下文菜单粘贴(右键单击假装为上下文菜单的html元素),即使剪贴板数据已被复制到剪贴板中应用程序,如Microsoft Paint。 这适用于Google Chrome浏览器,这是我感兴趣的浏览器。

我认为他们使用闪光灯,但即使我完全禁用闪光灯,它仍然有效 。 关于这个问题已经有了问题 ,但提到的答案并不正确。 该问题的另一个答案表明谷歌正在使用Chrome扩展程序,但即使我禁用了Chrome中的所有扩展程序,它仍然有效

如何在Windows中重现:

  • 在Chrome中禁用闪存,禁用所有扩展名
  • 重新开始
  • 转到谷歌文档并打开新的空写作文档(文档,而不是电子表格)
  • 在Windows中运行microsoft paint应用程序
  • 在microsoft paint中绘制一些东西,按Ctrl + A选择全部,按Ctrl + C进行复制
  • 切换回chrome到docs空白页面,然后右键单击空白页面
  • 从人工上下文菜单中选择粘贴(注意上下文菜单不是来自windows的本机菜单,但它来自google docs的html网页)
  • 您将看到剪贴板图像已粘贴到docs文档(!)
  • 他们如何做到这一点?

如果用户在我的网页上按Ctrl + V,我知道如何访问剪贴板数据,因为这会在当前窗口中触发粘贴事件。 但是,如何在用户只需单击按钮或div时,在javascript(或使用jquery)中访问剪贴板数据启动实际剪贴板数据 (例如,在mspaint中复制的位图) 的粘贴

我希望能够在用户点击时启动真正的粘贴事件。 我可以理解这可能是一个安全问题,因为……

以上是底线..

有这个代码JS小提琴

var Copy = document.getElementById('copy'), Cut = document.getElementById('cut'), Paste = document.getElementById('paste'); // Checking Clipboard API without an action from the user console.log('Copy:' + document.queryCommandSupported('copy')); console.log('Cut:' + document.queryCommandSupported('cut')); console.log('Paste:' + document.queryCommandSupported('paste')); //Now checking the clipboard API upon a user action Copy.addEventListener('click', function(){ console.log('Copy:' + document.queryCommandSupported('copy')); }); Cut.addEventListener('click', function(){ console.log('Cut:' + document.queryCommandSupported('cut')); }); Paste.addEventListener('click', function(){ console.log('Paste:' + document.queryCommandSupported('paste')); }); 
    

自定义粘贴适用于Chrome,但只能通过扩展程序。 如果你看看谷歌文档代码,你会发现没有安装扩展程序,你无法粘贴。 你可以尝试在Firefox中使用上下文菜单粘贴,它会告诉你它不可用,你需要使用CTRL + V. 你可以在google docs源代码中找到它:

复制和粘贴需要免费的Google云端硬盘网络应用。 这使我们可以访问您的剪贴板,以便您可以剪切,复制和粘贴。

所以很明显,粘贴命令需要扩展才能工作。

一种方法是使用execCommand('paste') ,当从页面调用时它不起作用,但实际上在扩展内容脚本中工作。 您只需要将clipboardRead添加到manifest.json权限 ,如下所示:

 permissions: { ... "clipboardRead" ... } 

然后在您的内容脚本document.execCommand('paste')将起作用。

编辑:

正如@ tomas-M和@ Mi-Creativity所指出的,Chrome浏览器上google文档的实现似乎是在Chrome本身,而不是在暴露的扩展中。 也许这可以提供关于定义位置的线索: https : //code.google.com/p/chromium/codesearch#chromium/src/chrome/common/extensions/api/_permission_features.json&q=clipboardRead&sq=package : chromium&dr = C&L = 164

很难说它是否真的像它的工作方式,但无论如何,你可以通过扩展为其他网站“解锁” execCommand('paste') 。 不太实用,但它的工作原理。

并且在控制台中测试document.execCommand('paste') ,而在google docs上给出了true,而在其他页面上它给出了false,所以我真的认为这是在google docs中实现这个function的方式。