--- title: 'PWA 學習筆記' disqus: Pai --- # 壹、目錄及代辦事項 ## Table of Contents [TOC] ## 待學習項目 - [ ] - - [ ] - - [ ] - - [ ] - # 貳、PWA 使用到的技術 PWA 必須在 https 協議下進行 PWA 不是一種新的技術,而是許多技術的集合體 ## 一、Web App Manifest 透過設置 Manifest 可以實現,將 PWA 網站增加到手機主畫面,變成一個類似 Native App。 透過設置可以將網址欄位等原本瀏覽器的選單去掉,可以讓 PWA 網站更像是一個 Native App。 ## 二、Service Worker - 瀏覽器在後台獨立運行的腳本 - 攔截及處理網路請求、操作緩存 - 支援 push API 和 navigation API - 後台同步 & 更新緩存 => 透過第一次載入頁面進行緩存,接下來第二次進入頁面就不用在進行網路請求,載入速度就會快許多。 # 二、Web App Manifest ## 1. 加入 Manifest 功能 在文件中加入 Manifest.json 檔案,並在 html 的 head 做引用。 ```htmlmixed= <head> <link rel="manifest" href="./manifest.json"> </head> ``` Manifest.json 檔中包含的資料 ```javascript= { "name": "PWA Demo", // 手機內提示加入主畫面會出現的名稱 "short_name": "Demo", // 手機主畫面 app icon 下的名稱 "icons": [ { "src": "assets/images/icons/icon_144x144.png", "sizes": "144x144", "type": "image/png" }, { "src": "assets/images/icons/icon_152x152.png", "sizes": "152x152", "type": "image/png" }, { "src": "assets/images/icons/icon_192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "assets/images/icons/icon_512x512.png", "sizes": "256x256", "type": "image/png" } ], /* 可以設置多個 icon,主頁面的 APP 會去抓 48dp 的 icon,而初始跳轉頁面會去抓 128dp 的 icon */ "start_url": "/index.html", /* 1. 可在 / 添加參數用於來源統計 2. / 根目錄下可以再加入子目錄,如 /detail,讓一打開 PWA 時跳轉到 detail 畫面 */ "display": "standalone", /* 設置啟動畫面的類型: fullscreen 網頁會佔滿整個螢幕 standalone 隱藏瀏覽器相關的 UI,保留手機原本 UI,像手機電量... minimal-ui 和 standalone 效果類似,但不同瀏覽器效果略微不同 browser 與原本瀏覽器顯示相同 */ "background_color": "#fff", // 設置啟動畫面的背景顏色 "theme_color": "#1976d2" // 設置地址欄的顏色 } ``` Safari 目前可能不支援的屬性,可以透過添加屬性來補足 ![](https://i.imgur.com/SfOTuuk.png) 跳出添加提示加入主畫面視窗的條件 ![](https://i.imgur.com/a8PTzYI.png) # 三、Service Worker ## 1. 特性 - 不可以直接操作 DOM - 需要時直接喚醒,不需要時休眠 - 離線內容開發者可控制 - 一但安裝,永久存活,除非手動卸載 - 必須在 https 或 localhost 環境下執行 - 使用 Promise