通过 JavaScript 在浏览器中获取或设置剪贴板中的内容,常用于一键复制或使用网页油猴复制限制文本
使用 execCommand (已弃用)
写入文本到剪贴板
document.onclick = function() {
let text = 'hello world'
let dom_input = document.createElement('input')
dom_input.value = text
document.body.appendChild(dom_input)
dom_input.select()
document.execCommand("Copy")
dom_input.parentElement.removeChild(dom_input)
}
用户和页面要先有交互(点击行为)才能复制成功
使用 clipboard (标准推荐)
使用 clipboard 只能获取剪贴板中的文字和图片,并且需要用户授权,某些操作需要有用户交互(点击行为)
从剪贴板读取文本
navigator.clipboard.readText().then((text) => {
console.log(text)
}, (error) => { console.log(error) })
从剪贴板读取文件
document.onclick = function() {
navigator.clipboard.read().then((file_list) => {
for(let item of file_list) {
for(let file_type of item.types) {
console.log('文件类型', file_type)
item.getType(file_type).then(res => {
if(['text/html', 'text/plain'].includes(file_type)) {
res.text().then(text => {
console.log(text)
}, (error) => { console.log(error) })
} else {
open(URL.createObjectURL(res))
}
}, (error) => { console.log(error) })
}
}
}, (error) => { console.log(error) })
}
写入文本到剪贴板
navigator.clipboard.writeText('hello world').then(function() {
console.log('success')
}, function(error) { console.log(error)} )
写入文件到剪贴板
let input = document.createElement('input')
input.type = 'file'
document.body.appendChild(input)
input.onchange = function(ev) {
let f = ev.target.files[0]
let item = [ new ClipboardItem({ 'image/png': new Blob([f], {type: 'image/png'}) }) ] // 写入图片
let text = [ new ClipboardItem({ 'text/plain': new Blob(['hello world'], {type: 'text/plain'}) }) ] // 写入文本
navigator.clipboard.write(item).then(function() {
console.log('success')
}, function(error) { console.log(error) })
}
以上代码均在 Chrome 107.0.5304.88 测试通过,但不能保证其他浏览器也能用,其中 ```clipboard.write()``` 存在 bug 不建议使用。
标签:剪贴板,console,log,text,JavaScript,获取,error,input From: https://www.cnblogs.com/adore/p/16831987.html