Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将本机HTML粘贴到浏览器剪贴板_Javascript_Clipboard - Fatal编程技术网

Javascript 将本机HTML粘贴到浏览器剪贴板

Javascript 将本机HTML粘贴到浏览器剪贴板,javascript,clipboard,Javascript,Clipboard,通过单击按钮,用户将当前页面中的HTML内容放入剪贴板。然后,在电子邮件中,粘贴保留HTML格式的内容。其目的是复制浏览器窗口中的内容选择,而无需用户进行选择(单独视图) 我有这个设置和工作的大部分。我认为没有权限问题。然而,在下面的代码中,我得到了“粘贴”,但随后粘贴(CTRL+V),粘贴缓冲区中没有任何内容。如果我将其切换到剪贴板.writeText(),我会得到纯文本格式的html。只是对html使用Blob,导致粘贴缓冲区为空 我认为它与Blob部分有关,也许text/html部分是错误

通过单击按钮,用户将当前页面中的HTML内容放入剪贴板。然后,在电子邮件中,粘贴保留HTML格式的内容。其目的是复制浏览器窗口中的内容选择,而无需用户进行选择(单独视图)

我有这个设置和工作的大部分。我认为没有权限问题。然而,在下面的代码中,我得到了“粘贴”,但随后粘贴(CTRL+V),粘贴缓冲区中没有任何内容。如果我将其切换到剪贴板.writeText(),我会得到纯文本格式的html。只是对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相关的剪贴板内容)。