JavaScript: запрос разрешений буфера обмена в Firefox не работает - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь изменить содержимое буфера обмена, выполнив команду «копировать» на выделенном элементе DOM.Однако новый контент поступает с сервера и поступает из веб-сокета, который затем обрабатывается в обратном вызове, который не поступает от прямого взаимодействия с пользователем.

Поскольку он не был запущен пользователем, онзапрещается делать такие вещи, как изменение содержимого буфера обмена, как указано на сайте MDM Firefox .Сообщение об ошибке:

document.execCommand ('cut' / 'copy') было отклонено, поскольку оно не было вызвано из обработчика короткого запуска, созданного пользователем.

Чтобы преодолеть эту проблему, на той же странице предлагается запрашивать разрешения для браузера через navigator.permissions.query():

navigator.permissions.query({name: "clipboard-write"}).then(result => {
  if (result.state == "granted" || result.state == "prompt") {
    /* write to the clipboard now */
  }
});

Однако, подумал, что в статье используются разные имена для разрешений:

  • clipboard-write
  • clipboard-read
  • clipboardWrite
  • clipboardRead

В пределах одного сайта разрешенияВ статье показана таблица совместимости браузера , в которой говорится, что Firefox поддерживает clipboardWrite с версии 51 и clipboardRead с версии 54.

Проблема заключается в том, что ни одно из этих разрешений не работает в Firefox(Я использую Firefox 63).Запрос обратного вызова никогда не вызывается.Я попробовал четыре имени разрешения без всякой удачи.

Чтобы убедиться, что механизм работает, я проверил другие разрешения, такие как notifications, которые работали безупречно (показывалось "приглашение")

navigator.permissions.query({name: "notifications"}).then(result => {
  alert(result.state)
});

Итак, мой вопрос:что-то не так при запросе разрешений или эти разрешения изменились?

...