在主题目录中创建manifest.json
,并在 header.php
的 <head>
里引用:
<link rel="manifest" href="<?php echo Typecho_Widget::widget('Widget_Options')->themeUrl; ?>/manifest.json">
manifest.json
内容:
{
"name": "Joomaen's Blog",
"short_name": "Joomaen",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "/usr/themes/你的主题/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/usr/themes/你的主题/icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
注意:
start_url
设为/
,确保 PWA 启动时进入首页。display: "standalone"
让 PWA 以独立窗口运行,而不是浏览器标签页。- 创建
icons
目录,并放入192x192
和512x512
PNG 图标。
在 Typecho 主题目录 下新建 sw.js
,并缓存主要页面资源:
在 footer.php
文件的 <body>
结束前加入以下代码用来注册 Service Worker
<script>
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("<?php echo Typecho_Widget::widget('Widget_Options')->themeUrl; ?>/sw.js")
.then(() => console.log("Service Worker 注册成功"))
.catch(err => console.log("Service Worker 注册失败", err));
}
</script>
配置 Typecho 伪静态(适用于 Nginx)(可选)
location /sw.js {
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
location /manifest.json {
add_header Content-Type application/json;
}