Как проверить, что у пользователя есть в буфере обмена?

#javascript

Вопрос:

В моем проекте у меня есть эта функция, которая копирует в буфер обмена после того, как пользователь нажал кнопку.

 copy(id) {
      const input = document.querySelector(`#${id}`)
      input.setAttribute('type', 'text')
      input.select()
      document.execCommand('copy')
      input.setAttribute('type', 'hidden')

      if (id === 'wallet') {
        this.walletCopied = true
      } else if (id === 'amount') {
        this.amountCopied = true
      }
    }
 

Конструкция if-else необходима для изменения значков, если пользователь их уже скопировал. Есть ли возможность проверить, что у пользователя есть в буфере обмена, потому что мне может понадобиться это еще раз, чтобы снова изменить значки, если пользователь что-то изменил в буфере обмена

Комментарии:

1. Я не вижу, что это имеет какое-либо отношение к узлу или выражению?

2. document В «экспрессе» нет никаких объектов. Не путайте код JavaScript, который вы отправляете в браузер и запускаете там, с другим кодом JavaScript, который вы запускаете на сервере Node.js.

Ответ №1:

На самом деле, ответ прост. Пользователь может скопировать в буфер обмена только одну строку. Итак, мы можем сделать что-то подобное:

 copy(id) {
  const input = document.querySelector(`#${id}`)
  input.setAttribute('type', 'text')
  input.select()
  document.execCommand('copy')
  input.setAttribute('type', 'hidden')

  if (id === 'wallet') {
    this.walletCopied = true
    this.amountCopied = false
  } else if (id === 'amount') {
    this.amountCopied = true
    this.walletCopied = false
  }
}
 

Ответ №2:

document.execCommand() вызывает текстовую копию и сохраняет ее в буфере. Это что-то специфичное для окружающей среды. Чтобы узнать содержимое, вы можете написать код для запуска процесса. Для OSx мы используем:-

     var proc = require('child_process').spawn('pbcopy'); 
    // Note:- pbcopy is availalbe in osx
    proc.stdin.write(data); 
    proc.stdin.end();
 

Однако для Windows все будет по-другому. Если вы хотите использовать более сложное решение, вы можете использовать clipboardy.

https://github.com/sindresorhus/clipboardy