【发布时间】:2020-09-03 20:30:55
【问题描述】:
我正在使用 Firebase 云消息传递 (FCM) 发送数据消息,以便我可以使用 Service Worker 处理通知。现在我使用 Service Worker 显示通知,当我单击通知时,我想将通知的内容复制到剪贴板中。
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler((payload)=> {
const title = payload.data.title;
const options = {
body: payload.data.body
};
return self.registration.showNotification(title,
options);
});
self.addEventListener('notificationclick', (event)=>{
console.log(event);
navigator.clipboard.writeText(event).then(function() {
console.log('Async: Copying to clipboard was successful!');
}, function(err) {
console.error('Async: Could not copy text: ', err);
});
});
当点击通知时notificationclick 事件被触发。但我得到navigator.clipboard 未定义。我也在为我的网站使用安全域。我也无法使用document.execcommand('copy'),因为使用 Service Worker 无法访问 DOM。您能否建议一种无需打开任何网址即可复制通知内容的方法?
【问题讨论】:
-
我认为你需要这个:developer.mozilla.org/en-US/docs/Web/API/Client/postMessage 你将能够在客户端做你想做的事。让我知道如果它对你有帮助,我会做一个anwser
-
似乎您必须打开一个实际的浏览器窗口才能运行复制命令,否则您无权访问该 API。也许打开它、复制和关闭它可能就像从未发生过一样发生?即使知道它并不理想,我也会尝试了解它的进展情况。
-
@Gilsdav as postMessage 仅适用于 DOM,但我不想打开任何窗口。
-
@enapupe 是的,navigator.cilpborad 将不起作用。但我正在寻找其他方法来实现相同的目标。
标签: javascript service-worker web-notifications