【教程】三分钟让你的网站支持PWA
什么是PWA?
PWA是个处于app与网页之间的一种东西,有些类似微信小程序,但是它的出生时间比小程序早而且更加的开放。
这里就不再多赘述,更加详细的信息就引用一下 微软对PWA的概述>>,有兴趣的可以更深入的了解
开始
要想网站支持PWA那么必须得支持https。如果没有https的话下面就不用看了
必备文件
manifest.json //配置文件
sw.js //service worker javascript
两个图标 //一个192px*192px,一个512px*512px
新建 manifest.json 文件,填入内容可参考下面样式
{
"name": "葭兴Jaxing.cc",
"short_name": "葭兴",
"description": "葭兴Jaxing.cc",
"icons": [
{
"src": "https://api.jaxing.cc/file/logo192.png", // 图标资源路径
"sizes": "any",
"type": "image/png",
"purpose": "any"
},
{
"src": "https://api.jaxing.cc/file/logo512.png", //图标资源路径
"sizes": "512x512",
"type": "image/png"
}
],
"background_color": "#FFE8E7",
"theme_color": "#FFE8E7",
"display": "fullscreen",
"orientation": "portrait",
"start_url": "/",
"scope": "/"
}新建 sw.js 文件,填入内容可参考下面样式
// cache名,
const cacheName = "cache";
// cache文件
const cacheFiles = ["/"];
/**
* 安装 Service Worker
* install事件是 Service Worker 执行的第一个事件,同一个 Service Worker 只会调用一次
* 即使 Service Worker 脚本文件只有一个字节不同,浏览器也将视为一个新的 Service Worker
*/
self.addEventListener("install", e => {
e.waitUntil(
caches.open(cacheName)
.then(cache => {
return cache.addAll(cacheFiles);
}),
);
});
/**
* 激活 Service Worker
* Service Worker 安装成功之后,会触发activate事件
* 在这个阶段我们一般做一些清理旧缓存相关的工作
*/
self.addEventListener("activate", (e) => {
// e.waitUntil(caches.delete(cacheName));
e.waitUntil(
caches
.keys()
.then((keys) => {
return Promise.all(
keys.map((key) => {
// 清理缓存
if (cacheName !== key) {
return caches.delete(key);
}
})
);
})
.then(() => {
console.log("cache deleted");
})
);
});
self.addEventListener("fetch", event => {
event.respondWith(
caches
.open(cacheName)
.then(cache => cache.match(event.request, { ignoreSearch: true }))
.then(response => {
return response || fetch(event.request);
}),
);
});然后把这两个文件放在网站根目录下即可,然后再在<head>标签内添加下面内容以声明配置文件
<link rel="manifest" href="manifest.json" />
然后再添加以下脚本激活sw服务
<script>
if ("serviceWorker" in navigator) {
window.addEventListener("load", function () {
navigator.serviceWorker
.register("sw.js")
.then(res => console.log("service worker registered"))
.catch(err => console.log("service worker not registered", err));
})
}
</script>再添加下面内容提示用户启用PWA
<script>
var deferredPrompt = null;
// 判断用户是否安装此应用:beforeinstallprompt,如果用户已经安装过了,那么该事件不会再次触发
// 需要卸载,然后重新打开浏览器才能再次触发
window.addEventListener("beforeinstallprompt", e => {
e.preventDefault();
deferredPrompt = e;
});
// 安装完成后触发,即点击安装弹窗中的“安装”后被触发
window.addEventListener("appinstalled", () => {
deferredPrompt = null;
});
</script>至此就PWA基本部署完毕,用chrome内核的浏览器即可触发PWA安装提示
ps:本站已支持PWA了哟





