Javascript 复制到剪贴板需要花费大量时间

Javascript 复制到剪贴板需要花费大量时间,javascript,clipboard,Javascript,Clipboard,我有以下代码将~25MB的数据复制到剪贴板: // star time after populating HTML and Text const start_time = new Date().getTime(); navigator.clipboard.write([ new ClipboardItem({ "text/html": new Blob([html], { type: "text/html",

我有以下代码将~25MB的数据复制到剪贴板:

// star time after populating HTML and Text
const start_time = new Date().getTime();
navigator.clipboard.write([
    new ClipboardItem({
        "text/html": new Blob([html], {
            type: "text/html",
        }),
        "text/plain": new Blob([text], {
            type: "text/plain",
        }),
    }),
]).then(() => {
    // end time after async clipbaord api method is completed
    const end_time = new Date().getTime();
    console.log("writing to clipboard : DONE in", (end_time - start_time) / 1000, "s");
});

需要45秒


“剪贴板.写入(…)需要这么长时间,这有什么原因吗?”?对于如何改进这一点,是否有一些建议,或者这只是为了不复制大量数据?

这可能是因为他们在将html附加到剪贴板之前对其进行了清理,因此,如果您的脚本试图将恶意脚本插入为html,当用户将其粘贴到内容可编辑元素中时,它不会被执行

清理25MB的html确实需要一些时间,但这应该并行完成,并且不会阻塞您的UI

不幸的是,StackSnippets沙盒iFrame不允许剪贴板API,因此在这里您可以看到的输入确实是经过清理的

故障代码:

btn.onclick=(evt)=>{
const danger_content=`alert(“我很坏”);`;
navigator.clipboard.write([
新剪贴簿({
“text/html”:新Blob([危险内容,“嘿”],{type:“text/html”})
})
]);
};
document.onpaste=(evt)=>{
log.textContent=`来自粘贴事件的原始“文本/html”数据:
${evt.clipboardData.getData(“text/html”)}`;
};
输出:

作为富文本:
brokenHey


作为原始标记:
Hey

Blob数据的源在哪里?(从本地数据库或文件?/远程站点?/通过浏览器提供数据?)@浏览器中的KenLee本地数据。零网络传输。您使用的浏览器是什么?(IE??)@KenLee Chrome@KenLee复制的最好方法可能只是复制一些大约20MB的html或xml文档,并将其用于测试。我明白了,但对我来说,复制一些东西需要40秒——即使是异步完成的,这仍然是一种糟糕的用户体验(相比之下,对相同数量的数据进行同步复制需要1.1秒)。有没有办法解决这个问题,或者用其他方法来进行异步复制呢。。。25MB是“很多”。为什么需要将25MB的html复制到剪贴板中?不管怎样,复制或粘贴这么多数据都会使大多数应用程序崩溃。你不能改为制作一个html文件的下载链接吗?