如何将超大值复制到剪贴板?

时间:2017-12-23 10:34:22

标签: javascript html5

我有一个包含巨大单元格值的表。这些值被截断为100个符号,以使表格轻量且快速。在单元格悬停时,我显示了一个CopyButton。 在CopyButton上单击我正在调用函数copyToClipboard并在那里传递单元格值。

在复制大于1MB的值时,浏览器冻结一分钟,最后我的剪贴板中的值不会改变。

const copyToClipboard = text => {
    const textField = document.createElement('textarea')
    textField.innerText = text
    document.body.appendChild(textField)
    textField.select()
    document.execCommand('copy')
    textField.remove()
}

是否有任何可以使用巨大值运行的剪贴板解决方案?

1 个答案:

答案 0 :(得分:0)

我的解决方法:

如果值大于150k符号,我会将文件抛出到用户浏览器。请参阅downloadTextDocument功能。

const downloadTextDocument = (documentValue, filename) => {
    const blob = new File([documentValue], filename, { type: 'text/plain' })
    const downloadUrl = window.URL.createObjectURL(blob);
    download(downloadUrl, filename);
    window.URL.revokeObjectURL(downloadUrl); // cleanup
}

const download = (url, filename) => {
    const tempLink = document.createElement('a');
    tempLink.href = url;
    tempLink.setAttribute('download', filename)
    document.body.appendChild(tempLink);
    tempLink.click();
    document.body.removeChild(tempLink);
}