我知道这个问题很久以前就已经发布了,但我需要检查谷歌是如何做到的,所以也许有人会发现它很有用。
实际上谷歌也使用系统剪贴板,但它有点棘手。如果您使用键盘快捷键,您可以在例如窗口上捕获复制/粘贴/剪切事件:
window.addEventListener('copy', function (ev) {
console.log('copy event');
// you can set clipboard data here, e.g.
ev.clipboardData.setData('text/plain', 'some text pushed to clipboard');
// you need to prevent default behaviour here, otherwise browser will overwrite your content with currently selected
ev.preventDefault();
});
键盘快捷键的实时示例:http : //jsfiddle.net/tyk9U/
不幸的是,这只是键盘快捷键的解决方案,上下文菜单存在问题,因为如果没有本机(受信任的)复制/剪切/粘贴事件,您将无法访问剪贴板数据。但谷歌做了有趣的把戏。有 APIdocument.execCommand()
允许您为 contenteditable 元素运行命令,还有命令“复制”,您可以通过document.execCommand('copy')
. 但是当您在 Chrome 的控制台中尝试此操作时,它会返回false
. 我花了一些时间对此进行调查,结果发现他们安装了 Chrome 扩展程序,称为“Google Drive”(转到 chrome://apps/,您可以在那里看到它),它可以为域 drive.google 启用剪贴板访问。 com 和 docs.google.com。打开一些文档或电子表格并在控制台中输入document.execCommand('copy')
- 它会返回true
. 卸载扩展后,您将无法从上下文菜单使用剪贴板操作。
您可以使用非常简单的清单文件为自己创建这样的应用程序(详情见https://developer.chrome.com/apps/first_app):
{
"manifest_version": 2,
"name": "App name",
"description": "App description",
"version": "1.0",
"app": {
"urls": [
"http://your.app.url.here/"
],
"launch": {
"web_url": "http://your.app.url.here/"
}
},
"icons": {
"128": "x-128.png"
},
"permissions": [
"clipboardRead",
"clipboardWrite"
]
}
此处的“权限”字段启用剪贴板操作。
现在,当您启用此功能时,您可以执行此操作document.execCommand('copy')
并且它将起作用(将返回true
)。但这并不是全部 -document.execCommand('copy')
在 chrome 中触发复制事件,您可以使用用于捕获键盘剪贴板快捷方式的相同代码来捕获它。这是现在谷歌做到的。
当然,这个描述只对 Chrome 有效。