如何将网络通知内容复制到剪贴板

2024-01-24

我正在使用 Firebase Cloud Messaging (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')因为 DOM 无法使用 Service Worker 访问。您能否建议一种无需打开任何网址即可复制通知内容的方法?


您无法从 ServiceWorker 复制到剪贴板。您需要一个活动的前台浏览器选项卡/窗口才能复制到剪贴板。

来自 chrome 网络更新存档https://developers.google.com/web/updates/2018/03/clipboardapi https://developers.google.com/web/updates/2018/03/clipboardapi

与许多新 API 一样,navigator.clipboard 仅支持通过 HTTPS 提供的页面。为了帮助防止滥用,仅当页面是活动选项卡时才允许访问剪贴板。活动选项卡中的页面无需请求权限即可写入剪贴板,但从剪贴板读取始终需要权限。

我还检查了 ServiceWorkers 和 Clipboard API 的浏览器规范,没有定义任何有关服务工作线程上下文的特定内容。

编辑:我已经向该帖子的作者询问了这个具体问题https://mobile.twitter.com/_developit/status/1264290519926128641 https://mobile.twitter.com/_developit/status/1264290519926128641

我不相信它在 Service Worker 中可用。我的建议是让通知单击处理程序打开一个页面(如果尚未打开),并在收到事件时在该页面内同步调用 writeText() 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将网络通知内容复制到剪贴板 的相关文章

随机推荐