Я пытаюсь изменить содержимое буфера обмена, выполнив команду «копировать» на выделенном элементе 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)
});
Итак, мой вопрос:что-то не так при запросе разрешений или эти разрешения изменились?