比如说,在我的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>
如果我使用这个JavaScript example,我复制的只是上面的HTML标记.但我想知道,我可以将其复制为格式化文本,还是这个?
This is a test
And this is
too
Thank you
解决方法
修复
crbug.com/395376后,您可以在清单文件中声明clipboardWrite权限,只需使用yuor内容脚本中的以下代码:
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');
在修复上一个错误之前,您必须将数据传递到后台页面并从那里复制邮件.此解决方案不是最佳解决方案,因为您要在后台页面中插入不受信任的HTML.有关如何使用innerHTML进行复制的示例,请参阅https://stackoverflow.com/a/25275151.
如果您了解与使用innerHTML相关的风险,并且您接受其后果,那么您可以使用以下代码来复制富文本:
// content script var element = document.body; // Example chrome.runtime.sendMessage({ html: 'copyhtml',text: element.outerHTML });
背景页面:
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(); } });
(如果读者想要复制文本而不是富文本,请参阅Clipboard Copy / Paste on Content script (Chrome Extension))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。