JavaScript - 将大字符串复制到剪贴板

3
我正在开发一个网格,并且现在我正在尝试将网格中的信息复制到Excel中。一切都按预期工作,但如果数据太大,则复制过程需要很长时间。
我使用文本区域技巧,使用“document.execCommand(“copy”)”。
我可以看到我的问题在于“textarea.select();” 将文本粘贴到文本区域非常快,但选择所有文本需要很长时间。然后也很快发送到剪贴板。 问题似乎在于选择。
我正在谈论复制像[500000、40]这样的数组。 大量数据。
我尝试了一些Chrome API,但最终找不到任何好的解决方案。 是否有其他聪明的方法将数据复制到剪贴板?

很怀疑你能做什么。 - epascarello
1
输入速度应该比文本区域快得多,如果您可以不使用换行符,请尝试使用输入框。 - dandavis
哈哈,我不能没有换行符,我需要在Excel中粘贴。 - Leonardo Buzinskas
1个回答

3
问题是数据处理所需的时间比execCommand("copy")更长。实际上,复制需要在用户生成的事件中调用,并且它附带有时间限制(没有任何地方提到,但我发现我的工作中限制为~5秒,对此的任何规定都将受到欢迎)。如果您的数据处理需要超过这个时间限制,它将无法复制数据。解决方案之一是预先处理数据,然后打开对话框/弹出窗口要求用户点击按钮来复制数据。
此外,为了进行快速复制(在Safari中不起作用),您可以使用以下方法:
var contentToCopy;
function copyDataToClipboard(e) {
    e.preventDefault(); // default behaviour is to copy any selected text
    e.clipboardData.setData("text/plain", contentToCopy);
}
function copy(content) {
    contentToCopy = content;
    document.addEventListener("copy", copyDataToClipboard);
    try {
        document.execCommand("copy");
    } catch (exception) {
        console.error("Copy to clipboard failed");
    } finally {
        document.removeEventListener("copy", copyDataToClipboard);
    }
}

copy(content = [Any content you would like to copy to clipboard]);

希望这能解决你在复制大量数据方面遇到的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接