c00*_*0fd 5 html javascript clipboard google-chrome google-chrome-extension
比如说,在我的 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>
Run Code Online (Sandbox Code Playgroud)
如果我使用这个JavaScript 示例,我所复制的只是上面的 HTML 标记。但我想知道,我可以将其复制为格式化文本,还是这样?
这是一个测试
这也是
谢谢
修复crbug.com/395376后,您可以clipboardWrite在清单文件中声明权限,并只需使用您的内容脚本中的以下代码:
var element = document.body; // Example, select the "whole" document
// Change selected area
var r = document.createRange();
r.selectNode(element);
var s = window.getSelection();
s.removeAllRanges();
s.addRange(r);
// Copy - requires clipboardWrite permission + crbug.com/395376 must be fixed
document.execCommand('copy');
Run Code Online (Sandbox Code Playgroud)
在修复之前的错误之前,您必须将数据传递到后台页面并从那里复制消息。此解决方案不是最佳解决方案,因为您将在后台页面中插入不受信任的 HTML。有关如何滥用用于复制的示例,请参阅/sf/answers/1769260601/ 。innerHTML
如果您了解与使用innerHTML相关的风险,并且接受其后果,那么您可以使用以下代码来复制富文本:
// content script
var element = document.body; // Example
chrome.runtime.sendMessage({
html: 'copyhtml',
text: element.outerHTML
});
Run Code Online (Sandbox Code Playgroud)
背景页:
chrome.runtime.onMessage.addListener(function(message) {
if (message && message.type == 'copyhtml') {
var wrapper = document.createElement('div');
// WARNING: Potentially insecure!
wrapper.innerHTML = message.html;
document.body.appendChild(wrapper);
var range = document.createRange();
r.selectNode(wrapper);
var s = window.getSelection();
s.removeAllRanges();
s.addRange(r);
// Copy - requires clipboardWrite permission
document.execCommand('copy');
wrapper.remove();
}
});
Run Code Online (Sandbox Code Playgroud)
(如果读者想要复制文本而不是富文本,请参阅剪贴板复制/粘贴内容脚本(Chrome 扩展))