日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PWA(Progressive Web App)入门系列:(三)PWA关键技术Manifest

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PWA(Progressive Web App)入门系列:(三)PWA关键技术Manifest 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

前面說過,讓Web App能夠達到Native App外觀體驗的主要實現技術就是PWA中的manifest技術,本章會詳細說明manifest的實現,及各個參數的具體含義,還將了解如何定義Web App的啟動圖標、啟動樣式等。

簡介

manifest是一種簡單的json數據風格的配置文件,通過對其相應的屬性進行配置,才實現相應的功能,這里可以稱manifest為WEB應用清單。WEB應用清單可以實現自定義啟動畫面、打開URL、設置界面顏色、設置桌面圖標等等。

大概就是下面這樣:

{"short_name": "短名稱","name": "這是一個完整名稱","icons": [{"src": "144x144.png","type": "image/png","sizes": "144x144"}],"background_color": "#2196f3","display": "standalone","start_url": "index.html" }

部署到瀏覽器

好么manifest.js如何讓瀏覽器去執行呢?

只需要用link標記引用即可:

<link rel="manifest" href="manifest.js">

目前各大瀏覽器對manifest的支持程度:

成員

下面對manifest涉及到的各個屬性詳細說一下。

name

name: {string},用來描述應用的名稱,會顯示在各類提示的標題位置和啟動畫面中。

short_name

short_name: {string},用來描述應用的短名字。當應用的名字過長,在桌面圖標上無法全部顯示時,會用short_name中定義的來顯示。

start_url

start_url: {string},用來描述當用戶從設備的主屏幕點擊圖標進入時,出現的第一個畫面。

  • 如果設置為空字符串,則會以manifest.js的地址做為URL
  • 如果設置的URL打開失敗,則和正常顯示的網頁打開錯誤的樣式一下(可以通過后面講的ServiceWorker改善)
  • 如果設置的URL與當前的項目不在一個域下,也不能正常顯示
  • start_url 必須在scope的作用域范圍內
  • 如果 start_url 是相對地址,那么根路徑基于manifest的路徑
  • 如果 start_url 為絕對地址,則該地址將永遠以 / 作為根路徑

scope

scope : {string},用來設置manifest對于網站的作用范圍。
下面列一下,scope的作用范圍及對start_url的影響:

manifest的文件位置start_urlscope配置計算好的scope計算好的start_url是否有效
/inner/manifest.json./index.htmlundefined/inner//index.html有效
/inner/manifest.json./index.html..///index.html有效 - 但作用域泄露到了更高層級
/inner/manifest.json////index.html有效 - 但作用域泄露到了更高層級
/inner/manifest.json/undefined/inner//無效 - start url不在作用域范圍內
/inner/manifest.json./inner/index.htmlundefined/inner//inner/inner/index.html有效 - 但start url明顯不符合預期
/manifest.json./inner/index.htmlundefined//inner/index.html有效 - 廣作用域
/manifest.json./inner/index.htmlinner/inner//inner/index.html有效 - 窄作用域

icons

icons: {Array.<ImageObject>},用來設置Web App的圖標集合。

ImageObject 包含屬性:

  • src: {string},圖標的地址
  • type {string},圖標的 mime 類型,可以不填寫。這個字段會讓瀏覽器不使用定義類型外的圖標
  • sizes {string},圖標的大小,用來表示widthxheight,單位為px,如果圖標要適配多個尺寸,則第個尺寸間用空格分割,如12x12 24x24 100x100。

sizes適配規則:

  • 在PWA添加到桌面的時候,瀏覽器會適配最合適尺寸的圖標。瀏覽器首先會去找與顯示密度相匹配且尺寸調整到 48dp 屏幕密度的圖標,例如它會在 2 倍像素的設備上使用 96px,在 3 倍像素的設備上使用 144px。。
  • 如果沒有找到任何符合的圖標,則會查找與設備特性匹配度最高的圖標。
  • 如果匹配到的圖標路徑錯誤,將會顯示瀏覽器默認 icon。

需要注意的是,圖標中必須要有一張尺寸為144x144的,圖標的 mime 類型為 image/png的。

background_color

background_color: {Color},值為CSS的顏色值,用來設置Web App啟動畫面的背景顏色。

可以像正常寫CSS顏色那樣定義:

// 完整色值 "background_color": "#0000ff" // 縮寫 "background_color": "#00f" // 預設色值 "background_color": "yellow" // rgb "background_color": "rgb(0, 255, 255)" // transparent 背景色顯示為黑色 "background_color": "transparent"

其他的定義rgba、hsl、hsla等顏色定義方式瀏覽器不支持,未設置時,背景色均顯示白色。

theme_color

theme_color: {Color},定義和background_color一樣的CSS顏色值,用于顯示Web App的主題色,顯示在banner位置。

display

display: {string},用來指定 Web App 從主屏幕點擊啟動后的顯示類型

顯示類型描述降級顯示類型
fullscreen應用的顯示界面將占滿整個屏幕standalone
standalone瀏覽器相關UI(如導航欄、工具欄等)將會被隱藏minimal-ui
minimal-ui顯示形式與standalone類似,瀏覽器相關UI會最小化為一個按鈕,不同瀏覽器在實現上略有不同browser
browser瀏覽器模式,與普通網頁在瀏覽器中打開的顯示一致(None)

對于不同的顯示樣式,可以通過CSS的媒體查詢進行設置:

@media all and (display-mode: fullscreen) {div {padding: 0;} }@media all and (display-mode: standalone) {div {padding: 1px;} }@media all and (display-mode: minimal-ui) {div {padding: 2px;} }@media all and (display-mode: browser) {div {padding: 3px;} }

orientation

orientation: {string},Web App的在屏幕上的顯示方向。

  • landscape-primary,當視窗寬度大于高度時,當前應用處于“橫屏”狀態
  • landscape-secondary,landscape-primary的180°方向
  • landscape,根據屏幕的方向,自動橫屏幕180°切換
  • portrait-primary,當視窗寬度小于高度時,當前應用處于“豎屏”狀態
  • portrait-secondary,portrait-primary的180°方向
  • portrait,根據屏幕方向,自動豎屏180°切換
  • natural, 根據不同平臺的規則,顯示為當前平臺的0°方向
  • any,任意方向切換

dir

dir: {string},設置文字的顯示方向。
- ltr,文本顯示方向,左到右
- rtl,文本顯示方向,右到左
- auto,根據系統的方向顯示

related_applications

related_applications: {Array.<AppInfo>},用于定義對應的原生應用,類似應用安裝橫幅的形式去推廣、引流。

AppInfo結構:
- platform: {string}, 應用平臺
- id: {string} 應用id

如安卓可以這么定義:

"related_applications": [{"platform": "play","id": "com.app.xxx"} ]

prefer_related_applications

prefer_related_applications:{Boolean},用于設置只允許用戶安裝原生應用。

實例

下面寫一下相關的常用實例。

目錄結構

項目結構:

根路徑 /||----manifest.json // 清單文件||----index.html||----144x144.png // 圖標文件||----sw.js

因為瀏覽器要安裝manifest中的定義,需要一些其他的代碼環境條件,以上目錄中,我們只討論manifest.json文件,其他文件后面會做說明。

index.html

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Manifest</title><link rel="manifest" href="./manifest.json"> <!-- 引用manifest文件 --> </head> <body><h1>Manifest Page</h1><script>// 此處代碼 后面相關章節會去說明if ('serviceWorker' in navigator) {window.addEventListener('load', function() {navigator.serviceWorker.register('sw.js').then(function(registration) {}).catch(function(err) {})})}</script> </body> </html>

sw.js

// 此處代碼 后面相關章節會去說明 var cacheName = 'helloWorld'self.addEventListener('install', event => {event.waitUntil(caches.open(cacheName).then(cache => cache.addAll(['index.html']))) })self.addEventListener('fetch', function (event) {event.respondWith(caches.match(event.request).then(function (response) {if (response) {return response;}return fetch(event.request);})) })

144x144.png

將應用添加到桌面

manifest.js

{"short_name": "短名稱","name": "這是一個完整名稱","icons": [{"src": "144x144.png","type": "image/png","sizes": "144x144"}],"display": "standalone","start_url": "index.html" }

按照上面方式配置,在移動端Chrome上訪問,效果如下:

瀏覽器會提示一個“添加到主屏幕”的提示。提示的標題顯示的是在manifest中定義的name,當點擊時,就會將應用添加到桌面:

桌面圖標上顯示的文本為manifest中定義的short_name。

點擊應用圖標,打開應用:

可以看到根據設置的display屬性,打開的應用去除了瀏覽器的地址欄。

注意

瀏覽器“添加到主屏幕”的提示是需要滿足下面條件才會顯示的:

  • 需要manifest文件
  • manifest中需要定義start_url
  • 需要包含144x144的png圖標文件
  • 網站是通過Https訪問的
  • 并且網站中運行ServiceWorker
  • 用戶需要至少瀏覽過網站兩次,并且兩次的間隔大于5分鐘
  • 如果修改了 manifest 的配置,已添加到主屏幕的名稱并不會改變,只有當用戶重新添加到桌面時,更改后的配置才會生效。但是在未來版本的 Chrome 瀏覽器將支持自動更新
  • 關于上面提到的第4點,我們可以建立一個https網站或者可以直接用github的pages服務來實現。

    關于第6點,是為了防止每次打開網址都有這個提示,對用戶造成較差的體驗。

    設置主題色

    "theme_color": "red"

    給主題色設置個紅色:

    可以發現App的header上已經變成了設置的紅色。

    設置啟動界面

    啟動界面是由icon、background_color和name構成的。

    "background_color": "#2196f3"

    效果:

    icon也會根據屏幕的尺寸,瀏覽器來適配最佳的圖標。

    添加到主屏幕 觸發的事件

    當執行”添加到主屏幕“的操作時,內部會觸發相應的事件beforinstallprompt。可以利用這個事件做一些事情,例如App判斷流量入口:

    window.addEventListener('beforeinstallprompt', function(e) {e.userChoice.then(function (result){if (result.outcome === 'dismissed'){// 發送數據進行分析} else {// 發送數據進行分析}}) })

    事件中的userChoice對象用來返回用戶的選擇信息,處理是基于Promise的,這個后面章節會詳說。

    本地調試

    上面是為了實現真是效果,所以在真是移動端上實現的。其實在測試的時候,是可以通過Chrome的開發者工具來測試的。

    首先,打開上一章里下載的”WebServer for Chrome”本地服務器工具,并把項目加下到里面,然后開始服務

    然后,在Chrome瀏覽器中訪問”Web Server URL(s)“下的地址http://127.0.0.1:8887

    然后,打開開發者工具,打開Application選項卡,選擇Manifest,就可以后到配置的信息了。

    并可以通過點擊”Add to homescreen“觸發添加圖標到桌面的事件。

    授權后即可添加到桌面




    線上manifest驗證

    除去本地調試外,還可以通過在線清單驗證工具來實現驗證,例如:Web Manifest Validator

    總結

    到這里,總結一下:

    • manifest是一種簡單的JSON文件,通過對屬性進行相應的配置,可以實現很多類Native的體驗
    • 添加到主屏幕會觸發相應的事件,可以基于這些事件做相應的處理
    • 調試的時候,可以基于Chrome的開發者工具,或者通過線上的測試驗證工具
    • https可以借助github pages功能實現

    博客名稱:王樂平博客

    CSDN博客地址:http://blog.csdn.net/lecepin

    本作品采用知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議進行許可。

    總結

    以上是生活随笔為你收集整理的PWA(Progressive Web App)入门系列:(三)PWA关键技术Manifest的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。