如何仅在PWA中而不在网站中显示更新弹出窗口?

问题描述 投票:0回答:1

我有一个从头创建的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(添加到主屏幕)。我该怎么办?

javascript laravel service-worker progressive-web-apps
1个回答
0
投票

[如果只希望仅在PWA中有一个弹出窗口,而不是在台式机或移动浏览器中,则需要查看manifest.json文件。

应该有一个名为“ display”的属性,需要设置为等于“ standalone”]

"display": "standalone"

确认此设置正确,现在您可以通过执行以下操作检查用户是否正在使用独立应用程序(PWA):

if(navigator.standalone) {
    alert('Thanks for using our PWA!')
} else {
    alert('Please consider downloading our PWA.')
}

推荐问答