Javascript 如何将HTML格式的文本从Google Chrome扩展复制到剪贴板?

Javascript 如何将HTML格式的文本从Google Chrome扩展复制到剪贴板?,javascript,html,google-chrome,google-chrome-extension,clipboard,Javascript,Html,Google Chrome,Google Chrome Extension,Clipboard,比如说,在我的Chrome扩展中,我需要将用户格式化的HTML文本复制到剪贴板上。文本(HTML格式)可能是这样的: This is a <b>test</b><div><br></div> <div>And this is too</div><div><br></div><div>Thank you</div> 这是一个测试 这太谢谢你了 如果我使

比如说,在我的Chrome扩展中,我需要将用户格式化的HTML文本复制到剪贴板上。文本(HTML格式)可能是这样的:

This is a <b>test</b><div><br></div>
<div>And this is too</div><div><br></div><div>Thank you</div>
这是一个测试
这太谢谢你了
如果我使用它,我得到的只是上面的HTML标记。但我想知道,我可以把它复制成格式化文本,还是这个

这是一个测试,这是 太谢谢你了

修复后,您可以在清单文件中声明
clipboardWrite
权限,只需使用your内容脚本中的以下代码:

var元素=document.body;//例如,选择“整个”文档
//更改选定区域
var r=document.createRange();
r、 选择节点(元素);
var s=window.getSelection();
s、 删除所有范围();
s、 addRange(r);
//复制-需要剪贴板写入权限+crbug.com/395376必须修复
document.execCommand('copy');
在前一个bug修复之前,您必须将数据传递到后台页面并从那里复制消息。此解决方案不是最佳方案,因为您将在后台页面中插入不受信任的HTML。有关如何滥用
innerHTML
进行复制的示例,请参阅

如果您了解与使用innerHTML相关的风险,并接受其后果,则可以使用以下代码复制富文本:

//内容脚本
var元素=document.body;//例子
chrome.runtime.sendMessage({
html:'copyhtml',
文本:element.outerHTML
});
背景页:

chrome.runtime.onMessage.addListener(函数(消息){
if(message&&message.type=='copyhtml'){
var wrapper=document.createElement('div');
//警告:可能不安全!
wrapper.innerHTML=message.html;
document.body.appendChild(包装器);
var range=document.createRange();
r、 选择节点(包装器);
var s=window.getSelection();
s、 删除所有范围();
s、 addRange(r);
//复制-需要剪贴板写入权限
document.execCommand('copy');
wrapper.remove();
}
});

(如果读者希望复制文本而不是富文本,请参阅)

谢谢。这是一个很好的观点。好奇的是,我们能用regexp从被复制的html中删除所有的
标记以确保安全吗?也可能是
s。XSS攻击还可以使用什么?@c00000fd内联脚本和外部脚本将被扩展的默认值阻止。不会呈现iFrame,因为HTML是同步删除的。因此,攻击者不会在扩展的上下文中获得任何脚本功能。实际上,我是通过弹出窗口脚本执行的。@c0000fd如果您是从扩展弹出窗口(页面操作/浏览器操作)运行代码,那么您只需使用我答案顶部的代码段即可,因为
clipboardWrite
权限确实适用于扩展进程中运行的页面,例如扩展弹出窗口。@c0000fd。这就是扩展可以将数据复制到剪贴板的原因。除了Chromium的源代码之外,此“功能”没有任何文档记录,因此您不应该依赖它并正确声明
clipboardWrite
权限。