SW registration control via GET and cookies

This commit is contained in:
Matteo Gheza 2020-12-29 15:55:36 +01:00
parent 9f0aeae52a
commit e3cd470b55
4 changed files with 65 additions and 4 deletions

View File

@ -747,6 +747,19 @@ function init_class($enableDebugger=true, $headers=true)
}
bdump(get_included_files());
bdump($translations->loaded_translations);
if(isset($_GET["disableSW"])){
setcookie("disableServiceWorkerInstallation", true);
$tools->redirect("?");
} else if(isset($_GET["enableSW"])){
setcookie("disableServiceWorkerInstallation", false, time() - 3600);
setcookie("forceServiceWorkerInstallation", false, time() - 3600);
$tools->redirect("?");
} else if(isset($_GET["forceSW"])){
setcookie("disableServiceWorkerInstallation", false, time() - 3600);
setcookie("forceServiceWorkerInstallation", true);
$tools->redirect("?");
}
}
function t($string, $echo=true)

View File

@ -14,7 +14,7 @@ import 'jquery-pjax';
console.log("Commit: "+process.env.GIT_VERSION);
console.log("Date: "+process.env.GIT_AUTHOR_DATE);
console.log("Bundle mode: "+process.env.BUNDLE_MODE);
console.log("Bundle date: "+process.env.BUNDLE_DATE);
console.log("Bundle date: "+new Date(process.env.BUNDLE_DATE).toISOString());
$(document).pjax('a:not(.pjax_disable)', '#content', {timeout: 100000});
$(document).on('pjax:start', function() {
@ -54,14 +54,21 @@ $( document ).ajaxError(function(event, xhr, settings, error) {
console.log(settings);
});
var installServiceWorker = true;
if (getCookie("authenticated")) {
var installServiceWorker = true;
if(window.skipServiceWorkerInstallation !== undefined){ //if you want to disable SW for ex via greasyfork userscript
installServiceWorker = false;
}
if(getCookie("disableServiceWorkerInstallation")){
console.log("Skipping ServiceWorker installation because cookie 'disableServiceWorkerInstallation' exists");
installServiceWorker = false;
}
if ('serviceWorker' in navigator) {
if ('connection' in navigator && navigator.connection.saveData && !getCookie("forceServiceWorkerInstall")) {
if ('connection' in navigator && navigator.connection.saveData && !getCookie("forceServiceWorkerInstallation")) {
console.log("Skipping ServiceWorker installation because saveData is enabled");
installServiceWorker = false;
}
if ('storage' in navigator && 'estimate' in navigator.storage && !getCookie("forceServiceWorkerInstall")){
if ('storage' in navigator && 'estimate' in navigator.storage && !getCookie("forceServiceWorkerInstallation")){
navigator.storage.estimate().then(quota => {
const requiredMemory = 3 * 1e+6;
if (quota < requiredMemory) {

View File

@ -8,6 +8,44 @@
<meta name="google" content="notranslate">
<meta name="robots" content="none">
<link rel="manifest" href="manifest.webmanifest">
{% if delete_caches %}
<script>
//from https://stackoverflow.com/a/57149239
if ('caches' in window) {
console.log("Deleting caches...");
caches.keys()
.then(function(keyList) {
Promise.all(keyList.map(function(key) {
caches.delete(key);
console.log("deleted cache: "+key);
}));
});
}
/*{% if not delete_service_workers %}*/
location.href="?";
/*{% endif %}*/
</script>
{% endif %}
{% if delete_service_workers %}
<script>
//from https://stackoverflow.com/a/47515250
if(window.navigator && navigator.serviceWorker) {
console.log("UnRegistering service workers...");
navigator.serviceWorker.getRegistrations()
.then(function(registrations) {
for(let registration of registrations) {
console.log("deleted service worker:");
console.log(registration);
registration.unregister();
}
});
location.href="?";
}
/*{% if delete_service_workers_and_disable %}*/
document.cookie = "disableServiceWorkerInstallation=1";
/*{% endif %}*/
</script>
{% endif %}
<script src="{{ urlsoftware }}/resources/dist/{{ resource('main.js') }}"></script>
{% if enable_technical_support and technical_support_open %}
<!-- Smartsupp Live Chat script -->

View File

@ -55,6 +55,9 @@ function loadtemplate($templatename, $data, $requirelogin=true)
if($requirelogin) {
$user->requirelogin();
}
$data['delete_caches'] = isset($_GET["deleteCache"]) || isset($_GET["unregisterSW"]) || isset($_GET["unregisterSWandDisable"]);
$data['delete_service_workers'] = isset($_GET["unregisterSW"]) || isset($_GET["unregisterSWandDisable"]);
$data['delete_service_workers_and_disable'] = isset($_GET["unregisterSWandDisable"]);
$data['owner'] = $database->getOption("owner");
$data['urlsoftware'] = $database->getOption("web_url");
$data['user'] = $user->info();