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

Posted

技术标签:

【中文标题】Web Share API 在 iOS 上不起作用:Angular【英文标题】:Web Share API not working on iOS: Angular 【发布时间】:2020-05-13 12:17:49 【问题描述】:

我正在尝试通过网络共享像本机应用程序一样的图像。我也在使用 Angular。我使用了网络共享 API。这在 android 上正常工作,但是在 ios(Safari 和 Chrome)中会引发错误。我正在使用共享按钮来触发它。

这是我的代码:

if (
      this.windowNavigator.canShare &&
      this.windowNavigator.canShare( files: [file] )
    ) 
      this.windowNavigator
        .share(
          files: [file],
          title: "Vacation Pictures",
          text: "Photos from September 27 to October 14.",
        )
        .then(() => console.log("Share was successful."))
        .catch((error) => console.log("Sharing failed", error));
     else 
      console.error("Cannot use Web Share API");
    

我收到的错误是:Cannot use Web Share API

如果浏览器不受支持,通常会发生这种情况。 但是,根据https://caniuse.com/#search=web%20share 的说法,iOS 上的 Safari 13 是受支持的。 请注意,我尝试将导航器对象记录到控制台,并且它确实具有 share() 原型。我在 HTTPS 服务器上运行它。 请指导我如何进行。

【问题讨论】:

【参考方案1】:

如您所知,您收到的错误消息是由您自己的代码传播的。当navigator 没有canShare 属性或navigator.canShare( files: [file] ) 返回错误时,您会记录错误。

但是您需要使用的 API 是 navigator.share 不是 navigator.canShare 因为对后者的支持要有限得多。

根据截至 2020 年 5 月 13 日的 MDN:

要解决此问题,请考虑以下方法

if (typeof this.windowNavigator.share === "function") 
  try 
    await this.windowNavigator.share(
      files: [file],
      title: "Vacation Pictures",
      text: "Photos from September 27 to October 14.",
    );
    console.log("Share was successful.");
  
  catch (error) 
    console.log("Sharing failed", error);
  

else 
  console.error("Cannot use Web Share API: API unavailable.");

【讨论】:

也许我们需要navigator.canCanShare,但我想对它的支持会更加有限 @George 确实如此。您可以使用 if (typeof this.windowNavigator.canShare !== "function") Object.defineProperty(this.windowNavigator, "canShare", value: function() return typeof this.share === "function"; ) 之类的东西修补/sudo 填充 canShare 函数,以使您能够编写更好的代码,但这并不能验证共享类型的可用性【参考方案2】:

编辑(2021 年 6 月 9 日):Web Share API Level 2 在 iOS 15 Developer Beta 中默认可用和可用,这意味着它很可能会在 iOS 的最终公开版本中可用15.


正如 Aluan 所说,API 的支持有限,iOS 上根本不支持。请记住,这意味着它不受任何 iOS 浏览器的支持,即使是 Chrome,因为 iOS 上的所有浏览器都使用相同的 (WebKit) 引擎。

来自App Store Review Guidelines:

2.5.6 浏览网页的应用程序必须使用适当的 WebKit 框架和 WebKit javascript

【讨论】:

那么你的理想实现是什么样的?

以上是关于Web Share API 在 iOS 上不起作用:Angular的主要内容,如果未能解决你的问题,请参考以下文章

navigator.share 文件在 iOS 14 Safari 上不起作用

下载位数组图像在 IOS 上不起作用

全屏 API 在 Chrome/iOS 上不起作用

文件输入流在 Api 级别 29 上不起作用

图像映射在 iOS 设备上不起作用,大图像会被设备重新缩放

为啥这个 $.post() 在 iOS 上不起作用?