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

标签 javascript laravel service-worker progressive-web-apps

我有一个从头开始创建的 Laravel PWA。我正在使用 Laravel 的 Silviolleite PWA 插件。

我创建了一个服务 worker 。这是代码

> 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.')
}

关于javascript - 如何仅在 PWA 中而不在网站中显示更新弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58564944/

相关文章:

Laravel 5 - 编辑页面中的设计和数据问题

laravel - 如何通过 Laravel Eloquent 查询获取总和

google-chrome-devtools - 脱机时,Workbox 的offlineFallback 不起作用

javascript - 无法使用 AngularJS 中的 HTTP get 调用从 JSON 平面文件返回结果

javascript - ExtJS:关联的 idProperty 的转换函数未触发

php - 通过 HTTP 请求实例使用 session 与在 Laravel 中使用全局 session 助手之间的区别

javascript - 渐进式 Web 应用程序上的缓存版本控制

javascript - Webpack:将变量注入(inject)静态 service-worker.js

javascript - 获取html输入标签值

隐藏所选选项的Javascript