浏览器剪切板异步获取数据

472 阅读1分钟

前段时间有个先异步获取数据再将数据复制到剪切板的需求,最后找到两种方法,特记录一下。

方法一:使用clipboard.js。这个三方库的核心原理是模仿人的复制操作,先选中一段文字,再执行document.execCommand进行复制或剪切,最后再清除选中内容。但是在使用过程中发现,全都是同步操作时没啥问题,但如果中间有异步操作,例如要点击复制后获取到异步操作的内容后再复制到剪切板,就会发现剪切板有问题。

方法二:使用浏览器新API-navigator.clipboard

  // safari浏览器
  if (isSafari) {
    const clipboardItem = new ClipboardItem({
      'text/plain': new Promise((resolve, reject) => {
        post("/xxx", {
          xxx
        }).then(res => {
          if (res.status === 200) {
            resolve(res.data);
          }
      })
    })
    navigator.clipboard.write([clipboardItem])
  } else {
    post("/xxx", {
      xxx
    }).then(res => {
      if (res.status === 200) {
        navigator.clipboard.writeText(res.data)
      }
    })
  }