服务人员和 iOS / Safari

Service workers and iOS / Safari

在 Chromium 关于服务工作者的页面上,注意到

Service Workers are not supported by Chrome on iOS.

我假设它可以使用一些 cordova 插件传送到 iOS。还有其他方法可以在 iOS 设备上使用 Service Worker 吗?
我担心在 iOS 上发布新版本和发布新版本的 cordova 之间的时间。

有谁知道 iOS 上的 Chrome 将来是否会支持服务人员? :)

我不知道 iOS 上的 Chrome 是否或何时会支持 Service Worker,但今天使用 Cordova 绝对有可能。

npm 上的 Service Worker plugin 将允许您在 iOS 上的 Cordova 应用程序中使用 API。

尽管 Ian 在发布时(04.2015)的回答非常好,但这个问题成为许多对服务工作者和渐进式 Web 应用程序感兴趣的人的重要切入点,现在答案范围更广。

来自 Apple 的反馈

30.03.2018: Service Worker 随 Safari 11.1 一起提供。做得好! https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_11_1.html

2017.12.20: Safari 技术预览版 46 中默认启用服务工作者 https://webkit.org/blog/8042/release-notes-for-safari-technology-preview-46/

04.08.2017: 工作正式进行中:) https://webkit.org/status/#specification-service-workers

07.2017: webkit-dev 上的更多积极信号:

Apple engineers from the WebKit team have been heavily involved in ServiceWorkers spec discussions over the past few years. Many of our concerns with the spec have been addressed, especially for Fetch service workers which generally don't run beyond the scope of pages that use them. While we have not done any implementation work, the "under consideration" in this case is meant literally. We actually are considering it.

06.2016: 根据 Jake Archibald's 'Is ServiceWorker ready?' 当前 iOS (Safari) 的状态是:

Under consideration, Brief positive signals in five year plan.

请注意,它会影响 iOS 上的所有浏览器 - 由于 Apple 的限制,Chrome 在 iOS 上使用的是 WKWebView - 与 Safari 相同的渲染引擎,它是它周围只有一个小包装,因此它仅限于当前功能。

资源

Service Worker当前状态追踪最受认可的地方是Jake Archibald's 'Is ServiceWorker ready?'

还有另一个资源收集这些信息,提供有关各种 Chromium 构建的更多信息,在中国最流行并涵盖更多细节:https://ispwaready.toxicjohann.com/

争议

在 Nolan Lawson 的文章 Safari is the new IE (06/2015) 的主要观点是

之后,引发了关于 Apple 参与现代网络功能的广泛辩论

In recent years, Apple’s strategy towards the web can most charitably be described as “benevolent neglect.”

反对方的主要论点是 service worker 和其他 offline/PWA 功能不是以客户为中心的——Safari 开发的重点。

有些人甚至更激进,比如 Greg Blass in his article (07/2017)

Apple treats web apps like second class citizens because they don’t generate money like native apps in the app store.

共同点是 Apple 在开发可改善 Web 体验的功能方面落后于其他供应商(Chrome、Firefox、Edge),但修复关键错误的速度也非常缓慢,这些错误会影响某些功能技术上无法使用。

我写过一篇骂苹果的文章:

https://m.phillydevshop.com/apples-refusal-to-support-progressive-web-apps-is-a-serious-detriment-to-future-of-the-web-e81b2be29676

它被几个关键人物转发,然后发布在黑客新闻上,并继续获得一些不错的推特 activity。一周后,他们开始对其进行开发。所以 - 敬请期待,它来了!

最后,Apple 在他们的 TP 中添加了对 service worker 的支持。您可以在此处阅读有关 Safari 的 PWA 支持的更多信息

https://medium.com/awebdeveloper/progressive-web-apps-pwas-are-coming-to-a-safari-near-you-216812aba5a

这里是 service worker 的详细支持信息 http://ispwaready.toxicjohann.com/

Service Worker 在 Safari 11.1 中可用,它于 2018 年 3 月 29 日与 iOS 11.3 和 macOS 10.13.4 一起发布:

https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_11_1.html

注:

@mcl的回答 如果您在服务工作者中更改代码:

self.addEventListener( 'install', function(){
  return self.skipWaiting( );
});

下面的代码,它应该可以工作。我也更改了所有变量,所以只需复制粘贴即可。

self.addEventListener('install', event => {
  console.log('Attempting to install service worker and cache static assets');
  event.waitUntil(
    caches.open(FILES_CACHE)
    .then(cache => {
      return cache.addAll(urlsToCache);
    })
  );
});