PWA:安裝 Web 應(yīng)用

初識 PWA

要完整介紹 PWA 是什么,需要扯一堆名詞,毫無意義。
以改造公羊閱讀的過程為例,簡要的說明什么是 PWA。

公羊閱讀是個網(wǎng)站,將它改造成 PWA 應(yīng)用之后,在谷歌瀏覽器上點擊右上角三個小點點,可以看到安裝按鈕。
(沒有改造成 PWA 的網(wǎng)站是看不到安裝按鈕的~~)

圖1

點擊安裝,完成后會發(fā)現(xiàn)生成了桌面應(yīng)用圖標,像原生 App 一樣點擊一下圖標即可進入。

圖2

PWA 不只是改變 Web 網(wǎng)站的入口,點擊進入應(yīng)用,可以看到?jīng)]有瀏覽器中的地址欄,看起來就跟原生應(yīng)用一毛一樣。

圖3

在谷歌瀏覽器中輸入 chrome://apps 可以查看安裝了哪些 PWA 應(yīng)用,選擇應(yīng)用,右鍵可以卸載該應(yīng)用。

圖4

移動端也是一樣的,在手機瀏覽器上訪問公羊閱讀的網(wǎng)址:https://novel.dkvirus.top ,在網(wǎng)頁最下方可以看到提示框:"將公羊閱讀添加到主屏幕",點擊即可添加到桌面。

圖5

注意:移動端并不是所有機型都支持添加到桌面功能。

  • 360N6 手機就不支持,
  • IPhone XR 可以支持添加到主屏幕。

身邊測試手機機型有限,歡迎給我發(fā)郵件說明你的測試結(jié)果 me@dkvirus.com。

將網(wǎng)站改造成 PWA 應(yīng)用

這部分從頭介紹如何將一個網(wǎng)站改造成 PWA 應(yīng)用。

搭建一個網(wǎng)站

PWA 要求一:網(wǎng)址必須是 https 協(xié)議,或者域名是 localhost。

本地測試只要保證訪問域名是 localhost 即可,創(chuàng)建一個網(wǎng)頁 index.html,然后部署到 nginx 服務(wù)器上,通過 localhost 訪問 index.html。

不了解 Web 服務(wù)器的參考:圖解 Web 服務(wù)器

創(chuàng)建 index.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>PWA DEMO</title>
</head>
<body>
    <h1>將網(wǎng)站改造成 pwa 應(yīng)用</h1>
</body>
</html>

manifest.json

PWA 要求2:包含 manifest.json 中關(guān)鍵字段:short_name/name、icons、start_url、display;

manifest.json 定義了Web 應(yīng)用的參數(shù),比如:Web 應(yīng)用叫什么名字、Web 應(yīng)用的圖標是啥等等。

在 index.html 同級目錄下創(chuàng)建 manifest.json 文件

{
    "name": "測試PWA",
    "start_url": "/index.html",
    "display": "standalone",
    "icons": [
        {
            "src": "logo.png",
            "sizes": "192x192",
            "type": "image/png"
        }
    ]
}

屬性說明:

  • name 安裝應(yīng)用的名稱,比如上面??的 公羊閱讀;
  • start_url 點擊圖標進入應(yīng)用,訪問的第一個頁面;
  • display 有三個值 fullscreen(全屏展示)、standalone(不包含瀏覽器的地址欄)、minimal-ui;
  • icons 應(yīng)用的圖標,自己找個圖標命名為 logo.png 放在根目錄下即可。

在 index.html 的 header 屬性中引入 manifest.json 文件

// index.html
<head>
    // ......
    <link rel="manifest" href="manifest.json">
</head>

sw.js

PWA 要求三:注冊 Service Worker 并且監(jiān)聽 fetch 事件;

Service Worker 是 PWA 的另外一個知識點,主要用來做緩存,這里不多介紹。

在 index.html 同級目錄下創(chuàng)建 sw.js 文件(sw 是 service worker 的首字母拼接),監(jiān)聽 fetch 事件。

self.addEventListener('fetch', function (evt) {
    console.log('sw fetch() 發(fā)送的請求', evt.request.url)
})

在 index.html 中注冊 sw.js

<body>
    <h1>將網(wǎng)站改造成 pwa 應(yīng)用</h1>
    <script>
        // 判斷瀏覽器是否支持 service worker
        if ('serviceWorker' in navigator) {
            // load 事件完成之后才注冊 service worker
            window.addEventListener('load', function () {
                // 注冊 sw.js
                navigator.serviceWorker.register('/sw.js')
                    .then(function (registration) {
                        // 注冊成功
                        console.log('sw.js 注冊成功', registration.scope);
                    })
                    .catch(function (err) {
                        // 注冊失敗:(
                        console.log('sw.js 注冊失敗 ', err);
                    });
            });
        }
    </script>
</body>

驗證結(jié)果

啟動 nginx 服務(wù)器,訪問網(wǎng)址,瀏覽器右上角三個點點可以找到安裝按鈕。

圖6

如果沒有安裝按鈕,請檢查是否符合上述介紹的三個要求,亦或是您已經(jīng)安裝過 Web 應(yīng)用,也不會出現(xiàn)安裝按鈕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容