在 Google Chrome for Android 上调用 Javascript Notification API 不能直接从网页工作

Ice*_*unk 8 javascript notifications android google-chrome progressive-web-apps

我正在使用 JavaScript 通知 API 向我的用户显示一条小消息。它适用于我测试过的所有桌面浏览器,包括 Chrome……但不适用于 Android 版 Chrome(至少是 KitKat)。我读过的所有内容都表明,截至 2015 年 4 月,Android Chrome 支持 Notification API,并且该应用程序甚至具有通知权限设置……但是当我从其中调用 new Notification(...) 时什么也没有发生。事实上,即使是官方的 Mozilla Notification API 演示页面也没有显示它们,尽管能够获取权限信息等。

我需要做什么特别的事情才能使通知与 Android Chrome 兼容吗?

Kin*_*lan 7

在 Chrome for Android 上,您只能通过Service Worker打开通知。Service Worker 是一个与浏览器一起运行的脚本,即使页面或浏览器当前关闭也可以加载。

Service Worker 要求背后的主要原因是,通知的生命周期可以超过浏览器的生命周期(即用户可以关闭浏览器)并且通知仍将处于活动状态,因此当用户点击通知时,Android 需要唤醒“东西”起来,这个“东西”就是Service Worker。

通知指南很好地介绍了 Web 和 Chrome 中通知的当前状态 - 它重点关注推送消息,但也包含如何触发来自 Service Worker 的通知的所有详细信息。

这似乎是一个额外的障碍,但它实际上是一个净收益:即使浏览器关闭,您的通知在单击时仍然有效。


Jer*_*rsh 6

检查兼容性: http: //caniuse.com/#feat=notifications

“部分支持” 尽管正如 Kinlan 提到的,Web Service Workers 也是可以实现的。

navigator.serviceWorker.register('sw.js');
Notification.requestPermission(function(result) {
  if (result === 'granted') {
    navigator.serviceWorker.ready.then(function(registration) {
      registration.showNotification('Notification with ServiceWorker');
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

sw.js文件可以只是一个零字节文件。

信用到期:HTML5 通知在移动 Chrome 中不起作用