javascript – 如何从Google Chrome扩展程序将HTML格式的文本复制到剪贴板上?

比如说,在我的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))

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...