我有一个从头创建的Laravel PWA。我正在使用Laravel的Silviolleite PWA插件。
我已经创建了一名服务人员。这是代码
> var staticCacheName = "pwa-v" + new Date().getTime(); var filesToCache
> = [
> '/offline.html',
> '/css/style.css',
> '/js/app.js', ];
>
> // Cache on install self.addEventListener("install", event => {
> this.skipWaiting();
> event.waitUntil(
> caches.open(staticCacheName)
> .then(cache => {
> return cache.addAll(filesToCache);
> })
> ) });
>
> // Clear cache on activate self.addEventListener('activate', event =>
> {
> event.waitUntil(
> caches.keys().then(cacheNames => {
> return Promise.all(
> cacheNames
> .filter(cacheName => (cacheName.startsWith("pwa-")))
> .filter(cacheName => (cacheName !== staticCacheName))
> .map(cacheName => caches.delete(cacheName))
> );
> })
> ); });
>
> // Serve from Cache self.addEventListener("fetch", event => {
> event.respondWith(
> caches.match(event.request)
> .then(response => {
> return response || fetch(event.request);
> })
> .catch(() => {
> return caches.match('/offline.html');
> })
> ) });
下面是meta.blade.php中注册Service worker的代码
<script type="text/javascript">
// Initialize the service worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/serviceworker.js', {
scope: '.'
}).then(function (registration) {
// Registration was successful
console.log('Laravel PWA: ServiceWorker registration successful with scope: ', registration.scope);
}, function (err) {
// registration failed :(
console.log('Laravel PWA: ServiceWorker registration failed: ', err);
});
}
</script>
我只希望在PWA中有一个弹出窗口(如果可能的话)。如果不是,则在移动网站上(在移动设备上的浏览器中打开时)。弹出窗口提示用户删除当前PWA并打开网站,因为有更新并添加新PWA(添加到主屏幕)。我该怎么办?
[如果只希望仅在PWA中有一个弹出窗口,而不是在台式机或移动浏览器中,则需要查看manifest.json文件。
应该有一个名为“ display”的属性,需要设置为等于“ standalone”]
"display": "standalone"
确认此设置正确,现在您可以通过执行以下操作检查用户是否正在使用独立应用程序(PWA):
if(navigator.standalone) {
alert('Thanks for using our PWA!')
} else {
alert('Please consider downloading our PWA.')
}