https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable
1、第一件事,是搞一个https的站点出来
打开dns,这就是分分钟的事情了
2、第二步,搞一下nginx
到/etc/nginx/sites-enabled,目录下
lemonhall@lemonhallme:/etc/nginx/sites-enabled$ ls
code-server default lemon-blog
lemonhall@lemonhallme:/etc/nginx/sites-enabled$
sudo cp lemon-blog pwa-demo
server {
listen 80;
server_name pwa.lemonhall.me;
# enforce https
return 301 https://$server_name:443$request_uri;
}
然后:
sudo systemctl reload nginx
3、验证一下哈
https://pwa.lemonhall.me/login
没问题哈
4、修改成静态文件
server {
listen 80;
server_name pwa.lemonhall.me;
# enforce https
return 301 https://$server_name:443$request_uri;
}
server {
listen 443 ssl http2;
server_name pwa.lemonhall.me;
ssl_certificate /etc/letsencrypt/live/172-233-73-134.ip.linodeusercontent.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/172-233-73-134.ip.linodeusercontent.com/privkey.pem;
location / {
root /home/lemonhall/pwa_demo;
index index.html;
try_files $uri $uri/ =404;
}
}
5、在/home/lemonhall/pwa_demo,下面设立index.html
<!doctype html>
<html lang="en">
<head>
<link rel="manifest" href="manifest.json" />
<!-- ... -->
</head>
<body>
<h1>Hello pwa</h1>
</body>
</html>
6、接着来
安全上下文
要使 Web 应用程序可安装,它必须在安全上下文中提供。通常意味着它必须通过 HTTPS 提供。本地资源,如 localhost、127.0.0.1 和 file:// 也被视为安全。
我这么搞,首先满足了安全上下文吧?
对吧
7、然后
https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps/Guides/Offline_and_background_operation
接下来让这个应用可以离线起来
https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/HTML_and_CSS
接着就是一个教程了
首先我优化了viewport
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Cycle Tracker</title>
<link rel="stylesheet" href="style.css" />
声明我自己是个中文:
<html lang="zh">
8、开始写主程序
https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/JavaScript_functionality
const doButton = document.getElementById("dododo");
const outputArea = document.getElementById("output");
const randomPass = function (len = 16, mode = "high") {
const lowerCaseArr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',];
const blockLetterArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const numberArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const specialArr = ['!', '@', '-', '_', '=', '<', '>', '#', '*', '%', '+', '&', '^', '$'];
const passArr = [];
let password = '';
//指定参数随机获取一个字符
const specifyRandom = function (...arr) {
let str = "";
arr.forEach(item => {
str += item[Math.floor(Math.random() * item.length)]
});
return str;
}
switch (mode) {
case "high":
//安全最高的
password += specifyRandom(lowerCaseArr, blockLetterArr, numberArr, specialArr);
passArr.push(...lowerCaseArr, ...blockLetterArr, ...numberArr, ...specialArr);
break;
case "medium":
//中等的
password += specifyRandom(lowerCaseArr, blockLetterArr, numberArr);
passArr.push(...lowerCaseArr, ...blockLetterArr, ...numberArr);
break;
//低等的
case "low":
password += specifyRandom(lowerCaseArr, numberArr);
passArr.push(...lowerCaseArr, ...numberArr);
break;
default:
password += specifyRandom(lowerCaseArr, numberArr);
passArr.push(...lowerCaseArr, ...numberArr);
}
const forLen = len - password.length;
for (let i = 0; i < forLen; i++) {
password += specifyRandom(passArr);
}
return password;
}
doButton.addEventListener("click", (event) => {
var outputHtml = "";
for(var i=0;i<5;i++){
pass1 = randomPass();
outputHtml = outputHtml + pass1 + "</br>";
}
outputArea.innerHTML=outputHtml;
});
9、开始想办法能让它离线
https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps/Tutorials/CycleTracker/Service_workers