Можно ли отключить обновления в PWA?Javascript

Форум по Javascript
Ответить
Anonymous
 Можно ли отключить обновления в PWA?

Сообщение Anonymous »

У меня есть PWA, предназначенное для создания заметок. Исходный код открыт. Данные заметки хранятся на устройстве пользователя.
Можно ли сделать так, чтобы если я (разработчик) изменю код, пользователи все равно будут открывать установленную версию, и я не смогу принудительно обновить PWA?
Я пробовал все кэшировать, но сейчас при открытии PWA он сразу отправляет get-запрос в service.js, который возвращает 304 (данные не изменились). Теперь я могу просто переписать его и принудительно обновить приложение пользователя, добавив скрипт, который (например) отправляет заметки пользователя на мой сервер. Для обновления пользователю просто нужно закрыть приложение и открыть его снова. Конечно, с такой «уязвимостью» моим приложением никто не воспользуется.
Мне нужно как-то гарантировать, что я не смогу ничего сделать без ведома пользователя. Есть ли способы это сделать?
Вот пример первой версии PWA, не подразумевающей обновления:
index.html

Код: Выделить всё

pwa

if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('sw.js');
});
}


sw.js

Код: Выделить всё

const CACHE_NAME = 'pwa-cache-v1';

self.addEventListener('install', (e) => {
e.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
return cache.addAll(['./', './index.html', './manifest.json','./192x192.jpg','./512x512.jpg','./favicon.ico']);
})
);
});

self.addEventListener('fetch', (e) => {
e.respondWith(
caches.match(e.request).then((response) => {
return response || fetch(e.request);
})
);
});
Вот принудительное обновление для пользователя:
sw.js

Код: Выделить всё

const CACHE_NAME = 'pwa-cache-v2';

self.addEventListener('install', (e) => {
self.skipWaiting();
e.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
return cache.addAll(['./', './index.html', './manifest.json']);
})
);
});

self.addEventListener('activate', (e) => {
e.waitUntil(
caches.keys().then((keys) => {
return Promise.all(
keys.map((key) => {
if (key !== CACHE_NAME) {
return caches.delete(key);
}
})
);
}).then(() => {
return self.clients.claim();
})
);
});
Пользователь не очистил кеш и не удалил приложение, а просто закрыл и снова открыл его — теперь у него новая версия.
Представьте, что вы используете мессенджер со сквозным шифрованием. Его исходный код опубликован, и вы можете видеть, что на сервер отправляются ТОЛЬКО зашифрованные сообщения. Но в какой-то момент приложение обновится, и теперь вместе с вашими сообщениями будут отправляться и ключи шифрования. Чтобы этого не произошло, нужно отключить возможность обновления приложения.
Я повторю: я не хочу, чтобы PWA могла обновляться. Мне нужно сделать это максимально безопасным для пользователя.

Подробнее здесь: https://stackoverflow.com/questions/799 ... tes-in-pwa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»