有一种方法可以使用 Flash 欺骗网页上的“复制到剪贴板”功能......
但是有没有办法以纯javascript 方式(但仍然是跨现代浏览器)?
因为甚至 adobe 都放弃了对 flash 的关注,而更多地关注 html5...
有一种方法可以使用 Flash 欺骗网页上的“复制到剪贴板”功能......
但是有没有办法以纯javascript 方式(但仍然是跨现代浏览器)?
因为甚至 adobe 都放弃了对 flash 的关注,而更多地关注 html5...
出于安全原因,大多数浏览器不允许修改剪贴板(IE 除外)。
使复制到剪贴板功能跨浏览器兼容的唯一方法是使用 Flash。
现在,您可以选择要复制的所有数据,并要求用户单击CTRL+ C。
目前没有办法跨浏览器(出于安全原因经常禁用)。在较旧的浏览器中没有此类功能(安全问题)或通常必须手动打开......但在较旧的浏览器中,使用Flash执行此操作的可能性很高......
更新 2016
仍然不是移动跨浏览器,但在主要浏览器的新桌面版本中受支持...
Mozilla 开发人员文档现在对Document.execCommand()有更好的描述,特别是“复制”命令:
将当前选择复制到剪贴板。启用此行为的条件因浏览器而异,并且 随着时间的推移而演变。检查兼容性表以确定您是否可以在您的情况下使用它。
2016-08 更新:当前所有主要桌面浏览器都采用了复制/剪切!
Clipboard API
document.execCommand()
被标记为过时,但是,
如果Clipboard API
您出于某种原因需要支持 IE9+,那么您将需要在将来实现这两者。
此 API 旨在取代使用 document.execCommand() 访问剪贴板。
请注意,它仍在开发中,并且有一些实现细节 - 请参阅 MDN 链接以获取兼容性表中的更多信息
来自 MDN 的 Clipboard.writeText() 示例:
navigator.clipboard.writeText("<empty clipboard>").then(function() {
/* clipboard successfully set */
}, function() {
/* clipboard write failed */
});
MDN 的兼容性表:截至 2021-04-30
将来有可能在其他浏览器中以相同的方式完成此操作:
在 Firefox 41 之前,需要在 user.js 首选项文件中启用剪贴板功能。有关更多信息,请参阅 Mozilla 首选项简要指南。如果该命令不受支持或启用,则 execCommand 会引发异常而不是返回 false。
在 Firefox 41 及更高版本中,剪贴板功能在任何能够弹出窗口的事件处理程序(半可信脚本)中默认启用。
这意味着,任何支持复制/剪切的浏览器都极有可能仅在用户操作时执行此操作。例如:即时调用复制命令将不起作用,但是如果绑定到单击事件,它会起作用,即使事件未被阻止(例如导航)(Chrome 测试)。
这是来自 Google 的一些有趣的文章,也描述了选择 API: https ://developers.google.com/web/updates/2015/04/cut-and-copy-commands
顺便说一句:当然,您可以预先选择文本并要求用户单击CTRL+ C,但您会失去用户体验。
这是您可以在 IE 中执行此操作的一种方法...
<body>
<textarea rows="5" cols="20" wrap="hard" onblur="CopyToClipboard(this)"></textarea>
</body>
<script language="JavaScript">
function CopyToClipboard(text) {
Copied = text.createTextRange();
Copied.execCommand("Copy");
}
</script>