Javascript 将本机HTML粘贴到浏览器剪贴板
通过单击按钮,用户将当前页面中的HTML内容放入剪贴板。然后,在电子邮件中,粘贴保留HTML格式的内容。其目的是复制浏览器窗口中的内容选择,而无需用户进行选择(单独视图) 我有这个设置和工作的大部分。我认为没有权限问题。然而,在下面的代码中,我得到了“粘贴”,但随后粘贴(CTRL+V),粘贴缓冲区中没有任何内容。如果我将其切换到剪贴板.writeText(),我会得到纯文本格式的html。只是对html使用Javascript 将本机HTML粘贴到浏览器剪贴板,javascript,clipboard,Javascript,Clipboard,通过单击按钮,用户将当前页面中的HTML内容放入剪贴板。然后,在电子邮件中,粘贴保留HTML格式的内容。其目的是复制浏览器窗口中的内容选择,而无需用户进行选择(单独视图) 我有这个设置和工作的大部分。我认为没有权限问题。然而,在下面的代码中,我得到了“粘贴”,但随后粘贴(CTRL+V),粘贴缓冲区中没有任何内容。如果我将其切换到剪贴板.writeText(),我会得到纯文本格式的html。只是对html使用Blob,导致粘贴缓冲区为空 我认为它与Blob部分有关,也许text/html部分是错误
Blob
,导致粘贴缓冲区为空
我认为它与Blob
部分有关,也许text/html
部分是错误的?有没有办法让它发挥作用
<div id="lipsum" contenteditable="true" style="display: none;">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Vivamus mollis, augue eu vulputate fermentum.</p>
</div>
<script>
(function() {
let html = document.getElementById('lipsum').innerHTML
let content = new Blob([ html ], { type: 'text/html' })
let data = [ new ClipboardItem({ [ content.type ]: content }) ]
window.focus()
setTimeout(() => {
navigator.clipboard.write(data).then(
() => console.log('pasted'), <<< This fires
(error) => console.log('not pasted', error)
)
}, 2000)
})()
</script>
Lorem ipsum dolor sit amet,是一位杰出的献身者
mollis Vivamus,augue eu vulputate酵母菌
(功能(){
让html=document.getElementById('lipsum').innerHTML
让content=newblob([html],{type:'text/html'})
let data=[new ClipboardItem({[content.type]:content}]
window.focus()
设置超时(()=>{
navigator.clipboard.write(数据),然后(
()=>console.log('pasted'),您的代码在Chrome上对我起作用。我能够在加载页面并等待几秒钟后粘贴div内容。如果我没有持续聚焦页面,我会注意到错误。例如,当我保持inspector窗口向前时,它会出错
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<div id="lipsum" contenteditable="true" style="display: none;">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p>Vivamus mollis, augue eu vulputate fermentum.</p>
</div>
<script>
(function() {
let html = document.getElementById('lipsum').innerHTML
let content = new Blob([ html ], { type: 'text/plain' })
let data = [ new ClipboardItem({ [ content.type ]: content }) ]
setTimeout(() => {
window.focus()
navigator.clipboard.write(data).then(
() => console.log('pasted'),
(error) => console.log('not pasted', error)
)
}, 2000)
})()</script>
</body>
</html>
试验
Lorem ipsum dolor sit amet,是一位杰出的献身者
mollis Vivamus,augue eu vulputate酵母菌
(功能(){
让html=document.getElementById('lipsum').innerHTML
让content=newblob([html],{type:'text/plain'})
let data=[new ClipboardItem({[content.type]:content}]
设置超时(()=>{
window.focus()
navigator.clipboard.write(数据),然后(
()=>console.log('pasted'),
(错误)=>console.log('未粘贴',错误)
)
}, 2000)
})()
我可以使用事件侦听器复制text/html
的问题,并将剪贴板数据内容类型更改为text/html
。这一定是个怪癖。是的,我想我刚刚找到了Synergy(键盘/鼠标共享)正在剥离html。我早就做过类似的事情,跨浏览器/环境时有点问题。总是有类似Yep的事情,就是这样(复制到另一台机器时必须剥离与html相关的剪贴板内容)。