Safari 桌面 Web 共享 API 中缺少“复制”选项?

Posted

技术标签:

【中文标题】Safari 桌面 Web 共享 API 中缺少“复制”选项?【英文标题】:"Copy" option missing from Safari Desktop Web Share API? 【发布时间】:2020-08-18 09:47:13 【问题描述】:

我正在尝试为一些我希望允许用户复制/共享的文本实现 Web 共享 API,并且它已经成功,除了 Safari 桌面的问题。我检查navigator.share,如果存在,那么我只打开本机共享屏幕,如果不存在,我只需将文本直接复制到剪贴板(就像在桌面上一样)。

Safari 桌面确实支持 Web Share API,但它似乎没有提供一种方法来复制它?您可以在屏幕截图中看到它只是为我提供了一些选项。我错过了什么吗?有没有办法让“复制”作为选项?

const copyURL = copyText => 
if (navigator.share) 
  navigator
    .share( text: copyText )
    .then(() => )
    .catch(console.error);
 else 
  navigator.permissions.query( name: 'clipboard-write' ).then(result => 
    if (result.state === 'granted' || result.state === 'prompt') 
      navigator.clipboard.writeText(copyText).then(() => 
        setLinkCopied(true);
      );
    
  );

;

【问题讨论】:

【参考方案1】:

桌面 Safari 的分享表中确实没有“复制”功能。好消息是 Safari 支持Async Clipboard API,因此您可以轻松地使用它作为替代,如下例所示:

async function copyPageUrl() 
  try 
    await navigator.clipboard.writeText(location.href);
    console.log('Page URL copied to clipboard');
   catch (err) 
    console.error('Failed to copy: ', err);
  

【讨论】:

以上是关于Safari 桌面 Web 共享 API 中缺少“复制”选项?的主要内容,如果未能解决你的问题,请参考以下文章

Web Share API 在 iOS 上不起作用:Angular

iOS 内存崩溃上的 Web 音频 API

已知的“iPad 上的 Safari”与“桌面 Safari”的差异列表

Spotify web api 不适用于 ios 设备

语音识别 Safari

在 WKWebView 和 Safari 之间共享会话