...
 
Commits (7)
    https://gitcode.net/weixin_46898465/hexo-blog/-/commit/859b9bcee7798dcaea8672a7171c486e792b4dd2 Update layout.ejs 2021-08-11T22:02:36+08:00 曹智铭 xiaocao162020@xiaocao.onmicrosoft.com https://gitcode.net/weixin_46898465/hexo-blog/-/commit/a501969e7879165e8f57c411ef0f6998448f8470 Update layout.ejs 2021-08-11T22:05:19+08:00 曹智铭 xiaocao162020@xiaocao.onmicrosoft.com https://gitcode.net/weixin_46898465/hexo-blog/-/commit/8f524c222a6684e0890d2d9e1115e1bd50ec2dbc Create setup-your-pwa.md 2021-08-11T22:19:38+08:00 曹智铭 xiaocao162020@xiaocao.onmicrosoft.com https://gitcode.net/weixin_46898465/hexo-blog/-/commit/3920042c9302f86dad7950b54e96ba4b3385d2fa Update setup-your-pwa.md 2021-08-12T08:11:37+08:00 曹智铭 xiaocao162020@xiaocao.onmicrosoft.com https://gitcode.net/weixin_46898465/hexo-blog/-/commit/41ae3822920ba0cafe67cf34c6c2e71cd5268c5a Update layout.ejs 2021-08-12T08:13:17+08:00 曹智铭 xiaocao162020@xiaocao.onmicrosoft.com https://gitcode.net/weixin_46898465/hexo-blog/-/commit/68ab1601817aca6181c25abadb9545b120dc360d Update index.md 2021-08-12T08:18:04+08:00 曹智铭 xiaocao162020@xiaocao.onmicrosoft.com https://gitcode.net/weixin_46898465/hexo-blog/-/commit/2a5cabdb3e5b22a9d6496b7c8b20a24905828328 Update its-you-teacher-sam.md 2021-08-12T21:46:03+08:00 曹智铭 xiaocao162020@xiaocao.onmicrosoft.com
......@@ -15,7 +15,7 @@ layout: about
## 我在哪儿?
我在互联网上的许多角落都有足迹。大部分情况,我的账号的用户名或/和昵称为```曹智铭```或者```caozhiming```。当然,我也可能用了其他名称,
例如在GitHub上我是[cao-zhiming](http://github.com/cao-zhiming)(昵称是“曹智铭”);在Twitter上我是[caozhiming2020](http://twitter.com/caozhiming2020),等。
例如在GitHub上我是[@cao-zhiming](http://github.com/cao-zhiming)(昵称是“曹智铭”);在Twitter上我是[@caozhiming2020](http://twitter.com/caozhiming2020),等。
## 我在干(可以干)什么?
......@@ -25,3 +25,4 @@ layout: about
## 我该如何信任你?
我是```caozhiming.tk```的合法所有者,并已经在[Keybase](http://keybase.io)存储了[pgp key](https://keybase.io/caozhiming)
......@@ -16,7 +16,7 @@ permalink: /2021/07/26/its-you-teacher-sam/
<!-- more -->
<scipt src="https://ss.caozhiming.tk/js/sweetalert.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/cao-zhiming/ss-caozhimingtk/js/sweetalert.js"></script>
<script type="text/javascript">
swal("注意", "本文无任何技术内容,如仅看技术请退出", "info");
......@@ -129,3 +129,7 @@ Sam“预言”我们的下一位外教是一位美国小姐,还真猜对了
六年级,Lucy进行了她教育生涯中最后一场赛课。这是因为她体力无法支持更多的以后的赛课了。讲的是Music。我被要求做了一个**把同学家长、老师用英文讲最喜欢的歌的片段结合在一起,并最终汇聚成一个地球图案的视频**。当我逐一翻看素材时,一个熟悉的金发碧眼男子进入眼帘——Sam!他还是原先的模样,穿着一件绿衬衫,坐在一把凳子上,说着他喜欢的“Irish folk music”……
时光流逝,我们的一生中总会流过一个又一个人。许多人,在岁月中不知不觉地被遗忘,但有些人,会永远被你记得。Sam就会永远被我、被我的小学同学们,记得。
![Sam和我们](https://cdn.jsdelivr.net/gh/cao-zhiming/ss-caozhimingtk@0.9.2/img/sam-and-us.jpeg)
这是Sam与我们的离别会上的一张照片。**请注意,本照片仅供观赏,其它用途均属于违法、侵权行为。**
---
title: 陛下,臣以为可以试试PWA…
categories:
- 网站
tags:
- 网站
- 科技
- PWA
- Web前端
date: 2021/8/11 21:23:20
permalink: /2021/08/11/setup-your-pwa/
---
2016年,Google提出了一个叫PWA的概念。
2017年,该项目正式落地。随后,各大公司与浏览器开始宣布支持PWA。~~Internet Explorer不是一款浏览器。~~
2021年,本站全站支持PWA。
<!-- more -->
PWA全称**Progressive Web App**,即**渐进式网络应用**(自己翻译的,如有冲突请以官方为准)。它能够让你的网站有一种像应用的感觉~~(并没有好吧)~~,并且……
- 可以在后台加载,*妈妈再也不用担心关闭页面就不加载了*
- 可以离线使用,Service Worker会缓存一些文件,*妈妈再也不用担心我的网站离线不能访问了*
- UI(图形界面)好评,*妈妈再也不用担心我的网页访问起来不好看了*
- 无需下载和安装,*妈妈再也不用担心我的安装包到处都是了*
- 软件初版、迭代更新不必提交到App平台审核,*妈妈再也不用担心我的应用无缘由地审核不过了*
- 不必开发Windows、MacOS X、Linux、Android、iOS、Android、iPadOS这么一堆版本,*妈妈再也不用担心我的电脑被开发的不同版本的软件塞满了*
好吧,那么,我们就开始整PWA吧!
首先,我认为你需要先有一个~~bug不太多的~~网站。静态的动态的都随意;自建的用框架的都可以。如果想用Hexo,我认为我可以~~强迫~~让你去看看我的[Hexo指南](https://blog.caozhiming.tk/2021/05/04/how-to-setup-hexo/),写得超弱的。🤣
## Web Manifest
接着,我们需要配置Web Manifest。它相当于一个PWA网站的配置记录。示例如下:
```json
{
"name": "百度一下,你可能就不知道",
"short_name": "百度",
"display": "standalone",
"start_url": "/",
"theme_color": "#8888ff",
"background_color": "#aaaaff",
"icons": [
{
"src": "logo.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
```
解释一下以上都是些什么东西哈。
### ```name```
网站的名称。
### ```short_name```
网站的简短名称。有时候网不好,或者什么其他原因,就用它。
### ```display```
这标志着这个PWA的显示形式。这里展示一下所有的显示形式以及其相关内容。
| 显示模式 | 描述 | 后备显示模式 |
| --- | --- | --- |
| fullscreen | 全屏显示, 所有可用的显示区域都被使用, 并且不显示状态栏。 | standalone |
| standalone | 让这个应用看起来像一个独立的应用程序,包括具有不同的窗口,在应用程序启动器中拥有自己的图标等。这个模式中,用户代理将移除用于控制导航的UI元素,但是可以包括其他UI元素,例如状态栏。 | minimal-ui |
| minimal-ui | 该应用程序将看起来像一个独立的应用程序,但会有浏览器地址栏。 样式因浏览器而异。 | browser |
| browser | 该应用程序在传统的浏览器标签或新窗口中打开,具体实现取决于浏览器和平台。 这是默认的设置。 | 呃……没有 |
### ```start_url```
这标志着你的PWA一打开会跳转到什么URL。一般就是根目录嘛。输入```/```就好了。
### ```theme_color```和```background_color```
分别是主题颜色和背景颜色,颜色转换请百度搜索“颜色代码在线转换”。
### ```icons```
src是图标的路径。如果是相对路径,那么基本路径就是这个manifest所在的路径。
sizes是大小。**请注意,经过反复尝试,我发现图标大小必须大于512x512,并且中间的乘号应输入小写字母x**
type是图标的种类,与解码有关,常用的是image/png等等。**不一定与图标文件名后缀名相同。**
现在,把它保存成一个JSON文件,名字随便,最好类似于```manifest.json```,并上传到你网站的根目录。(特殊地,Hexo请上传到/source/目录下)接下来,在所有想要在PWA中包括的页面中的源代码的head部分,加入:
```html
<link rel="manifest" href="/manifest.json"/>
<meta name="theme-color"content="#8888ff"/> //这个应当与你在manifest.json当中的theme_color项设置内容一致
```
如果有需要(例如,有些页面不直接在根目录下),可以在href中使用绝对地址。(特殊地,Hexo请在/themes/<你安装并启用的主题>/layout/layout.ejs的head标签内嵌入上方代码,并在其第一个斜杠前加上你的网站的根URL,包括协议前缀,例如<strong>https://blog.caozhiming.tk</strong>
## Service Worker
这时,PWA才真正开始。为了配置Service Worker,我建议你使用[sw-toolbox](https://github.com/cao-zhiming/ss-caozhimingtk/blob/main/js/sw-toolbox.js),由于代码过长不便放在本文中。把它全部复制下来,保存为一个sw-toolbox.js文件,上传到网站根目录。(特殊地,Hexo请上传到/source/目录下)
然后,在根目录创建一个sw.js,并在里面写上以下内容。
```javascript
'use strict';
importScripts('sw-toolbox.js'); toolbox.precache(["index.html","/dir-to-cache",""]); toolbox.router.get('/*', toolbox.networkFirst, { networkTimeoutSeconds: 5});
```
你需要将```toolbox.precache()```当中的项名称改为你所需要提前在本地缓存的网页或文件或目录的地址。(特殊地,Hexo请务必将"index.html"改为"/",除非你的主题或你的个人设置将主页的部署永久链接设为了"index.html")
必须确保sw-toolbox.js以及sw.js在同一目录下且均可以正常访问。接下来,在每一个想要在PWA中显示的页面的head中添加如下代码:
```html
<script type='text/javascript'>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js').then(
function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope); },
function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
</script>
```
如果有需要(例如,有些页面不直接在根目录下),可以在```navigator.serviceWorker.register()```中使用绝对地址。(特殊地,Hexo请在/themes/<你安装并启用的主题>/layout/layout.ejs的head标签内嵌入上方代码,并在其第一个斜杠前加上你的网站的根URL,包括协议前缀,例如<strong>https://blog.caozhiming.tk</strong>
至此,基本的PWA内容已经结束。
## 杂项
不过PWA有的时候还要给一些手机用户用。这个时候,我们往往需要在head上加入这些代码:
```html
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"/>
<link rel="apple-touch-icon" sizes="192x192" href="apple-touch-icon.png"/>
```
第一行是把你的网页伸缩至适合的大小。当然,不止这么一行代码就完,你还得调整你的网站的div,不过如果是Hexo,主题程序猿应该已经为你做好了。
第二行是Apple iOS以及iPadOS设备将网站“保存”在主屏幕时显示的图标。请注意,这幅图片的大小必须是192x192(或者180x180),与[icons](#icons)当中的“必须大于512x512”相悖。因此必须保存两个大小不同的图片。若想编辑图片大小,建议你使用Windows自带“画图”工具或者Photoshop等修图工具,使用方法此处不再赘述。
如果```apple-touch-icon```需要使用绝对地址,同上。
经过以上~~的一番折腾~~,你使用浏览器打开自己的网站,在地址栏右侧应该就能看到它了:~~(这句话的正确性是建立 在Internet Explorer不是一款浏览器 的基础上的)~~
![PWA询问你是否安装](https://cdn.jsdelivr.net/gh/cao-zhiming/ss-caozhimingtk@1.0/img/pwa-ready.png)
以上就是有关PWA的一些内容以及相关安装方法。
......@@ -5,7 +5,7 @@
<head>
<link rel="manifest" href="https://blog.caozhiming.tk/manifest.json"/>
<link rel="icon" href="https://cdn.jsdelivr.net/gh/cao-zhiming/ss-caozhimingtk/img/logo.png"/>
<metaname="theme-color"content="#2932e1"/>
<meta name="theme-color"content="#2932e1"/>
<%
var title = page.title;
......@@ -26,7 +26,7 @@
<title><% if (title){ %><%= title %> - <% } %><%= config.title %></title>
<meta charset="UTF-8">
<meta name="description" content="<%= config.description %>"/>
<link rel="apple-touch-icon" href="https://blog.caozhiming.tk/ati.png"/>
<link rel="apple-touch-icon" sizes="192x192" href="https://blog.caozhiming.tk/ati.png"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"/>
<%- partial('_partial/_analytics/gtm-head') %>
<%- partial('_partial/site-verification') %>
......@@ -48,10 +48,6 @@ var _hmt = _hmt || [];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body class="mdui-drawer-body-left">
<script type='text/javascript'>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
......@@ -66,6 +62,10 @@ if ('serviceWorker' in navigator) {
});
}
</script>
</head>
<body class="mdui-drawer-body-left">
<%- partial('_partial/_analytics/gtm-body') %>
<div id="nexmoe-background">
<div class="nexmoe-bg" style="background-image: url(<%= theme.background.path %>)"></div>
......