在JavaScript中复制字符串

时间:2019-05-16 15:39:36

标签: javascript

是否可以在剪贴板中放置一个变量?我看过很多文章,它们都是通过选择DOM元素中存在的文本然后进行复制来完成的,这很简单,但是我还没有看到可以复制不在DOM中的内容的文章。
我想要一个包含字符串的变量或常量,然后将其发送到剪贴板,而使其不出现在浏览器窗口中(甚至作为隐藏元素)。 我知道使用隐藏元素将是解决此问题的快速方法,但是如果有更简洁的方法,它会显得有些笨拙。

2 个答案:

答案 0 :(得分:6)

您可以使用clipboard API。它尚无完全支持,但为pretty good

您可以像这样使用它:

navigator.clipboard.writeText("hello from site!")
  .then(() => console.log(`wrote to clipboard!`))
  .catch((error) => console.error(error));

请注意,这仅在当前网站(文档集中)为重点时有效

为了从剪贴板中阅读,您可以使用以下功能:

navigator.clipboard.readText()
  .then(text => console.log(text))
  .catch((error) => console.error(error));

此功能需要两件事才能起作用:

  • 与以前一样,用户需要专注于网站
  • 用户将被提示确认站点从剪贴板读取的能力(因为它可以包含敏感数据):

    enter image description here

Firefox

对于Firefox,除了要求用户授予读取剪贴板的权限外,it also only allows pasting it into a textarea

  

Firefox支持版本54中的“ clipboardRead”权限,但仅支持以内容可编辑模式粘贴到元素中,而内容脚本只能与一起使用。对于后台脚本,可以将任何元素设置为内容可编辑模式。

答案 1 :(得分:3)

您要的是Javascript,而不是jquery,所以您可以开始使用

function toClip(text) {
    var copy = document.createElement("textarea");
    document.body.appendChild(copy);
    copy.value = text;
    copy.select();
    document.execCommand("copy");
    document.body.removeChild(copy);
}

虽然它不使用DOM中的现有元素,但会创建一个元素并立即将其删除。