We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
之前看到有使用ant-design-pro的网站,在服务端更新后,前端会提示刷新页面。但是在调研后发现service-worker.js的更新,只会在重刷页面时检测到,并不会在已经开的tab里被检测到。所以之前看到的可能的情况可能是:有两个tab,一个tab刷新,另外一个tab就能检测service-worker.js。这样的话也不好用。
PWA(Progressive Web App)渐进式网页应用,所谓渐进式,意思就是主张很少,你不用遵守一系列的约束条件。提升 Web App 体验,能给用户原生应用的体验
从四个特性来详细讲讲实践效果。
条件
<link rel="manifest" href="/assets/manifest.json">
只https可用
manifest.json里提供icon,size > 144
注册service worker
效果
略
可以像app一样,安装在桌面,并提供沉浸式的体验,但是感觉和safari浏览器打开有点一样,与safari的区别就是最顶上的mac工具栏没有了。
在service-worker.js里监听push事件,并使用self.registration.showNotification(title, options)。需要依赖Notification api。
使用
服务端使用web-push
webpush.sendNotification(subscription, dataToSend)
略,就是桌面上安装个app一样,
代码示例
serivce-worker.js
self.addEventListener('activate', () => { self.registration.pushManager.subscribe().then((subscription) => { fetch(SERVER_URL, { method: "POST", headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(subscription) }) }) })
node
// 初始化subscription app.post('/save-subscription', async (req, res) => { const subscription = req.body; await saveToDatabase(subscription); res.json({ message: 'success' }); }); // 发送消息 app.get('/send-notification', (req, res) => { const subscription = db.subscription; const message = 'Hello World'; webpush.sendNotification(subscription, message); res.json({ message: 'message sent' }); })
self.addEventListener('push', function(event) { const title = 'Push service'; const options = { body: 'Yay it works.', icon: 'images/icon.png', badge: 'images/badge.png' }; event.waitUntil(self.registration.showNotification(title, options)); });
document.addEventListener('DOMContentLoaded', function () { if (!Notification) { console.log('Notification not support') return; } if (Notification.permission !== 'granted') { Notification.requestPermission(); } }); function notifyMe() { if (Notification.permission !== 'granted') { Notification.requestPermission(); } else { const notification = new Notification('Notification opened', { icon: 'xxx.png', body: 'hello', }); notification.onclick = function () { window.open('xxx'); }; } }
利用service worker来做静态资源的缓存,根据匹配url、正则,第一次获取将资源存在Cache Storage里,如果service-worker.js有更新,会重新获取最新的资源,并再次cache。支持离线缓存
tips:跨域缓存需要 workbox-cacheable-response 插件
workbox-cacheable-response
workbox.routing.registerRoute( /.*\.(?:|png|gif|jpg|jpeg|svg|mp4|js|css|image)$/, new workbox.strategies.CacheFirst({ plugins: [ new workbox.cacheableResponse.CacheableResponsePlugin({ statuses: [0, 200] }) ] }) );
监听fetch事件,如果是路由请求,则返回离线html
self.addEventListener('fetch', (evt) => { if (evt.request.mode !== 'navigate') { return; } evt.respondWith( fetch(evt.request) .catch(() => { return caches.open(CACHE_NAME) .then((cache) => { return cache.match('offline.html'); }); }) ); });
可以用,但没啥必要
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
之前看到有使用ant-design-pro的网站,在服务端更新后,前端会提示刷新页面。但是在调研后发现service-worker.js的更新,只会在重刷页面时检测到,并不会在已经开的tab里被检测到。所以之前看到的可能的情况可能是:有两个tab,一个tab刷新,另外一个tab就能检测service-worker.js。这样的话也不好用。
概述
PWA(Progressive Web App)渐进式网页应用,所谓渐进式,意思就是主张很少,你不用遵守一系列的约束条件。提升 Web App 体验,能给用户原生应用的体验
特性
实践
从四个特性来详细讲讲实践效果。
app安装
只https可用
manifest.json里提供icon,size > 144
注册service worker
略
小结
可以像app一样,安装在桌面,并提供沉浸式的体验,但是感觉和safari浏览器打开有点一样,与safari的区别就是最顶上的mac工具栏没有了。
消息推送
在service-worker.js里监听push事件,并使用self.registration.showNotification(title, options)。需要依赖Notification api。
服务端使用web-push
webpush.sendNotification(subscription, dataToSend)
略,就是桌面上安装个app一样,
serivce-worker.js
node
小结
缓存
利用service worker来做静态资源的缓存,根据匹配url、正则,第一次获取将资源存在Cache Storage里,如果service-worker.js有更新,会重新获取最新的资源,并再次cache。支持离线缓存
tips:跨域缓存需要
workbox-cacheable-response
插件缓存策略
缓存优先级
效果
代码示例
小结
离线可用
监听fetch事件,如果是路由请求,则返回离线html
小结
可以用,但没啥必要
整体总结
The text was updated successfully, but these errors were encountered: