【发布时间】:2011-01-20 06:23:18
【问题描述】:
是否可以在 javascript 中将图像复制到剪贴板?我知道如何复制文字,但你能复制图片吗?
这是安全限制吗?
【问题讨论】:
-
@Irwin:这个问题专门针对图像,而不是文本。
标签: javascript browser image clipboard
是否可以在 javascript 中将图像复制到剪贴板?我知道如何复制文字,但你能复制图片吗?
这是安全限制吗?
【问题讨论】:
标签: javascript browser image clipboard
最后一个答案是从 2010 年开始,从那时起浏览器发生了很大变化。 使用这个简单的功能,您可以将您想要的任何内容(文本、图像、表格等)(在您的页面上)复制到剪贴板。 该函数接收元素 id 或元素本身。
function copyElementToClipboard(element) {
window.getSelection().removeAllRanges();
let range = document.createRange();
range.selectNode(typeof element === 'string' ? document.getElementById(elementName) : element);
window.getSelection().addRange(range);
document.execCommand('copy');
window.getSelection().removeAllRanges();
}
【讨论】:
不,您不能将图像复制到剪贴板。将任何东西复制到剪贴板是每个浏览器的安全限制,但如果它们具有适当的安全设置,您可以将文本复制到 IE 中的剪贴板。此处 Mozilla 列出了由程序访问剪贴板引起的 some of the problems。
【讨论】:
是的,大多数脚本只支持文本。
http://forums.mozillazine.org/viewtopic.php?f=25&t=1195035&start=0
上述网站也在讨论同样的问题。
以下网站说的涉及到安全问题,
http://kb.mozillazine.org/Granting_JavaScript_access_to_the_clipboard
但这不适用于最新版本的 Mozilla。
【讨论】:
使用Clipboard API。有一个example on MDN specifically for images。
注意:2021 年的今天,ClipboardItem 可以在 Firefox 中通过将dom.events.asyncClipboard.clipboardItem 设置为true 来启用。其余主流浏览器都支持。因此,添加一些检查并告知用户如何打开该功能。
这是一个例子:
async function writeClipImg() {
if (!('ClipboardItem' in window)) {
return alert(
"Your browser doesn't support copying images into the clipboard."
+ " If you use Firefox you can enable it"
+ " by setting dom.events.asyncClipboard.clipboardItem to true."
)
}
try {
const imgURL = document.getElementById('image').src
const data = await fetch(imgURL)
const blob = await data.blob()
await navigator.clipboard.write([
new ClipboardItem({
[blob.type]: blob
})
])
console.log('Fetched image copied.')
} catch(err) {
console.error(err.name, err.message)
}
}
【讨论】: