Made progressive web app installable
This commit is contained in:
@@ -409,6 +409,9 @@ else()
|
|||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/index.html" $<TARGET_FILE_DIR:${PROJECT_NAME}>
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/index.html" $<TARGET_FILE_DIR:${PROJECT_NAME}>
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/coi-serviceworker.js" $<TARGET_FILE_DIR:${PROJECT_NAME}>
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/coi-serviceworker.js" $<TARGET_FILE_DIR:${PROJECT_NAME}>
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/manifest.json" $<TARGET_FILE_DIR:${PROJECT_NAME}>
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/icon-192.png" $<TARGET_FILE_DIR:${PROJECT_NAME}>
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/icon-512.png" $<TARGET_FILE_DIR:${PROJECT_NAME}>
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -1,57 +1,26 @@
|
|||||||
/* coi-serviceworker.js */
|
/* coi-serviceworker.js - Cross-Origin Isolation + PWA support */
|
||||||
|
|
||||||
if (typeof window === "undefined") {
|
// Service Worker context
|
||||||
// Código del Worker: Intercepta peticiones
|
self.addEventListener("install", () => self.skipWaiting());
|
||||||
self.addEventListener("install", () => self.skipWaiting());
|
|
||||||
|
|
||||||
self.addEventListener("activate", (event) =>
|
self.addEventListener("activate", (event) =>
|
||||||
event.waitUntil(self.clients.claim())
|
event.waitUntil(self.clients.claim())
|
||||||
);
|
);
|
||||||
|
|
||||||
self.addEventListener("fetch", (event) => {
|
self.addEventListener("fetch", (event) => {
|
||||||
if (event.request.method !== "GET") return;
|
if (event.request.method !== "GET") return;
|
||||||
|
|
||||||
event.respondWith(
|
event.respondWith(
|
||||||
fetch(event.request)
|
fetch(event.request).then((response) => {
|
||||||
.then((response) => {
|
if (response.status === 0 || response.type === "opaque") return response;
|
||||||
if (response.status === 0) return response;
|
const headers = new Headers(response.headers);
|
||||||
|
headers.set("Cross-Origin-Embedder-Policy", "require-corp");
|
||||||
const newHeaders = new Headers(response.headers);
|
headers.set("Cross-Origin-Opener-Policy", "same-origin");
|
||||||
newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp");
|
headers.set("Cross-Origin-Resource-Policy", "cross-origin");
|
||||||
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
|
|
||||||
newHeaders.set("Cross-Origin-Resource-Policy", "cross-origin");
|
|
||||||
|
|
||||||
return new Response(response.body, {
|
return new Response(response.body, {
|
||||||
status: response.status,
|
status: response.status,
|
||||||
statusText: response.statusText,
|
statusText: response.statusText,
|
||||||
headers: newHeaders,
|
headers,
|
||||||
});
|
});
|
||||||
})
|
}).catch(() => fetch(event.request))
|
||||||
.catch(() => fetch(event.request))
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
// Código de la Ventana: Registra el worker y recarga
|
|
||||||
(function () {
|
|
||||||
if ("serviceWorker" in navigator) {
|
|
||||||
navigator.serviceWorker
|
|
||||||
.register(window.document.currentScript.src)
|
|
||||||
.then((registration) => {
|
|
||||||
registration.addEventListener("updatefound", () => {
|
|
||||||
// Si hay una actualización, recargamos
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (registration.active && !navigator.serviceWorker.controller) {
|
|
||||||
// Si el worker está activo pero no controla la página aún, recargamos
|
|
||||||
location.reload();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Si ya estamos aislados, perfecto
|
|
||||||
if (window.crossOriginIsolated) {
|
|
||||||
console.log("Aislamiento de origen ACTIVADO");
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
}
|
|
||||||
|
|||||||
BIN
misc/web/icon-192.png
Normal file
BIN
misc/web/icon-192.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
BIN
misc/web/icon-512.png
Normal file
BIN
misc/web/icon-512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
@@ -2,6 +2,12 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="manifest" href="manifest.json">
|
||||||
|
<meta name="theme-color" content="#000000">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<link rel="apple-touch-icon" href="icon-192.png">
|
||||||
<title>MCPE 0.6.1</title>
|
<title>MCPE 0.6.1</title>
|
||||||
<style>
|
<style>
|
||||||
html, body {
|
html, body {
|
||||||
@@ -23,7 +29,20 @@
|
|||||||
|
|
||||||
<canvas id="canvas"></canvas>
|
<canvas id="canvas"></canvas>
|
||||||
|
|
||||||
<script src="coi-serviceworker.js"></script>
|
<script>
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
var reloadedForSw = false;
|
||||||
|
navigator.serviceWorker.register('./coi-serviceworker.js', { scope: './' }).then(function () {
|
||||||
|
navigator.serviceWorker.addEventListener('controllerchange', function () {
|
||||||
|
if (reloadedForSw) return;
|
||||||
|
reloadedForSw = true;
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
}).catch(function (error) {
|
||||||
|
console.warn('Service worker registration failed:', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var Module = {
|
var Module = {
|
||||||
|
|||||||
24
misc/web/manifest.json
Normal file
24
misc/web/manifest.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"name": "MCPE 0.6.1",
|
||||||
|
"short_name": "MCPE 0.6.1",
|
||||||
|
"description": "Minecraft Pocket Edition 0.6.1 Alpha - Web Build",
|
||||||
|
"id": "./",
|
||||||
|
"start_url": "./",
|
||||||
|
"scope": "./",
|
||||||
|
"display_override": ["standalone"],
|
||||||
|
"display": "standalone",
|
||||||
|
"background_color": "#000000",
|
||||||
|
"theme_color": "#000000",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "icon-192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "icon-512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user