在纯javascript中复制到剪贴板的方法?

在纯javascript中复制到剪贴板的方法?,javascript,clipboard,Javascript,Clipboard,有一种方法如何欺骗复制到剪贴板功能的网页与flash 但是,有没有一种方法可以使它以纯javascript的方式实现,但仍然可以跨越现代浏览器 因为即使是adobe也在关注html5的同时放弃了对flash的关注…以下是一种在IE中实现的方法 函数CopyToClipboardtext{ 复制=text.createTextRange; 复制。复制; } 出于安全原因,除IE外,大多数浏览器不允许修改剪贴板 使“复制到剪贴板”功能跨浏览器兼容的唯一方法是使用Flash 现在,您可以选择要复制的

有一种方法如何欺骗复制到剪贴板功能的网页与flash

但是,有没有一种方法可以使它以纯javascript的方式实现,但仍然可以跨越现代浏览器


因为即使是adobe也在关注html5的同时放弃了对flash的关注…

以下是一种在IE中实现的方法

函数CopyToClipboardtext{ 复制=text.createTextRange; 复制。复制; }
出于安全原因,除IE外,大多数浏览器不允许修改剪贴板

使“复制到剪贴板”功能跨浏览器兼容的唯一方法是使用Flash

现在,您可以选择要复制的所有数据,并要求用户单击CTRL+C。

目前无法做到这一点,因为出于安全原因,跨浏览器通常会被禁用。在较旧的浏览器中,没有这样的功能安全问题,或者通常必须手动打开。。。但在旧的浏览器中,使用Flash进行此操作的可能性很高

2016年更新 仍然不是移动跨浏览器,但在主要浏览器的newset桌面版本中受支持。。。 Mozilla developer文档现在对copy命令有了更好的描述,尤其是copy命令:

将当前选择复制到剪贴板。拥有的条件 启用的此行为因浏览器而异,并且具有 随着时间的推移而演变。检查兼容性表以确定您是否 你可以在你的情况下使用它

2016-08更新:当前所有主要桌面浏览器均采用复制/剪切

更新2021=>更改剪贴板API document.execCommand被标记为已过时,但是, 它应该被剪贴板API取代 如果出于某种原因,您需要支持IE9+,那么将来您将需要实现这两个功能

此API旨在取代使用 document.execCommand

请注意,它仍在开发中,并有一些实现细节-有关兼容性表中的更多信息,请参阅MDN链接

:

截至2021年4月30日

引用Firefox的方式 将来在其他浏览器中也有可能采用同样的方式:

在Firefox41之前,剪贴板功能需要在 user.js首选项文件。有关详细信息,请参阅Mozilla首选项简要指南 更多信息。如果该命令不受支持或未启用, execCommand正在引发异常,而不是返回false。 在Firefox 41及更高版本中,剪贴板功能默认在中启用 任何能够弹出窗口的事件处理程序 脚本

这意味着,任何支持复制/剪切的浏览器都极有可能仅在用户操作时执行此操作。例如:动态调用copy命令不起作用,但是如果绑定到click事件,它也会起作用,即使该事件没有被阻止,例如导航Chrome测试

下面是谷歌的一些有趣的文章,描述了:

顺便说一句:
当然,您可以预先选择文本并要求用户单击CTRL+C,但您会失去用户体验。

复制什么?文本屏幕截图?可能是@ShivanRaptor的复制品:主要是文本,但我认为这并不重要…@JosephDreamer:没有复制品问题是关于如何跨浏览器操作-而不是没有flash pure Javascript如何操作出于安全原因,你不能只使用JS&cross-browser.Cmon,必须有一种方法可以做到这一点,正如我所说,flash将在几年内消失,如果你能在flash中找到解决办法,那么在JS中拒绝它又有什么意义呢?O.O或者我们应该放弃web浏览器中的“复制到剪贴板”功能吗?这真是令人伤心。。。我投了你一票,但我不会选择它作为答案——这是为了激励人们在将来回答浏览器会想到的问题:浏览器供应商不允许通过JavaScript访问剪贴板是完全明智的选择。Flash内容也不应该被允许,但这不是浏览器可以控制的领域。我想说你可以接受这个答案,因为这是不可能的,也不会很快出现。但有一天他们可能会添加此功能,我的建议是允许在用户交互时复制到剪贴板,只允许文本复制转义这将永远不可能跨浏览器,因为它会带来重大安全风险。是的,这是一种仅在IE上支持的古老技术。它使用专有的Microsoft API,不能被视为仅JavaScript。
navigator.clipboard.writeText("<empty clipboard>").then(function() {
  /* clipboard successfully set */
}, function() {
  /* clipboard write failed */
});