2016-02-27 45 views
1

我希望我的Web应用程序偶尔在用户的桌面上显示通知。 GMail和Facebook使用这种相同的技术。HTML5服务人员:生命周期,持久性和代码加载

使用HTML5通知API获取用户的权限并随后显示通知的文档非常详尽且直接。但在我的情况下,如果即使他没有浏览我的网站,我也想向用户展示这些通知。我的研究将我指向Service Worker API。我已经运行了一些服务工作者教程,虽然我理解了大部分内容,但我仍然留有以下问题:

(1)我了解下载=>安装=>激活循环,​​但无法获取确切知道以前安装的Service Worker线程何时启动或关闭。我发现的唯一相关报价表示线程“可以随时启动和关闭”。尽管这是一篇旧文章。我们现在了解更多吗?具体来说:当用户启动他的电脑时线程是否启动?或者当用户在启动后第一次打开浏览器时就开始了?等等...同样,什么时候线程关机?可以想象,它可以在几分钟内关机吗?小时?天?

(2)如何坚持一个值?没有详细说明,在显示通知后,我需要在用户计算机上保留一个32位值。这就是我所要求的“国家”信息的范围。但出于未知原因,文章指出localStorage不能通过Service Worker上下文获得。那么我应该如何存储这个值?

(3)我的服务工作者代码将依赖于我创建的另一个对象,它位于'utils.js'中。我如何将它加载到内存中,以便我的服务人员可以看到它?通过我的网络应用程序,我可以在HTML中使用<script>标记。但在这种情况下,没有HTML - 只有JavaScript。那么,我该如何告诉服务工作者将此代码加载到内存中?

(4)如何调试我的服务工作者?使用标准的网络应用程序,我可以在Chrome中打开Alt-Cmd-I以打开调试面板。但在这种情况下,我没有调试特定的站点 - 我正在调试一个Service Worker线程。

感谢,

费斯图斯

+0

服务工作者API是否被设计用来保留浏览器会话?我只是好奇你是否浏览过域名以外的其他站点,你的服务人员会如何回复邮件? –

回答

2
  1. 服务工作者线程不会直到某些事件发生时可以再次执行。在你的情况下,你希望你的服务工作者在push事件发生时被执行,也就是你的服务器向客户端发送一个通知。
  2. 您可以使用IndexedDB(localForage是一个位于IndexedDB之上的简单库,实现类似于localStorage的接口)。
  3. importScripts
  4. 开发人员工具仍在Firefox中工作(您可以使用about:serviceworkers和about:在某些版本的Firefox中进行调试),在Chrome中,您可以在开发人员面板中的源和资源选项卡之间看到服务人员您也可以从那里模拟推送事件):https://www.chromium.org/blink/serviceworker/service-worker-faq

ServiceWorker Cookbook上有几个使用Web Push API的示例。