当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何粘贴点击?它适用于谷歌文档》经验,为你挑选了2个好方法。

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

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

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

如何在Windows中重现:

在Chrome中禁用闪存,禁用所有扩展名

重新开始

转到谷歌文档并打开新的空写作文档(文档,而不是电子表格)

在Windows中运行microsoft paint应用程序

在microsoft paint中绘制一些东西,按Ctrl + A选择全部,按Ctrl + C进行复制

切换回chrome到docs空白页面,然后右键单击空白页面

选择人工上下文菜单粘贴(注意上下文菜单中是不是从Windows本机菜单,但它来自谷歌文档的Html网页)

您将看到剪贴板图像已粘贴到docs文档(!)

他们如何做到这一点?

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



1> Mi-Creativit..:

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

以上是底线..

有这个代码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'));
});




2> Julien Grégo..:

自定义粘贴适用于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')在控制台中测试,而在谷歌文档上给出了真实,而在其他页面上它给出了错误,所以我真的认为这是在谷歌文档中实现这个功能的方式.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有