当前位置: 首页 > Web前端 > HTML5

【PWA学习与实践】(二)使用Manifest让你的WebApp更“原生”

时间:2023-04-05 20:33:09 HTML5

《PWA学习与实践》系列文章已整理成gitbook-PWA学习手册,正文内容已同步至learning-pwa-ebook。转载请注明作者和出处。本文是《PWA学习与实践》系列的第二篇。本文代码可以在learning-pwa的manifest分支找到(gitclone后注意切换到manifest分支)。PWA作为时下最热门的技术概念之一,对于提高Web应用的安全性、性能和体验具有重要意义,非常值得我们去了解和学习。欢迎对PWA感兴趣的朋友关注《PWA学习与实践》系列文章。一、简介我们知道,在chrome(以及其他一些现代浏览器)中,可以将访问过的网站添加到桌面,这会在桌面上生成一个类似于“快捷方式”的图标。当您点击该图标时,将可以快速访问该网站(WebApp)。我们以第一篇文章中的demo为例。添加到桌面后,重新打开时,状态如下:但是,对于PWA来说,有一些重要的特性:WebApp可以添加到桌面,并且有自己的应用程序图标;同时,从桌面打开时,它会像原生应用一样拥有自己的“打开屏幕图像”;此外,这个WebApp看起来和原生应用几乎一样——没有浏览器的地址栏和工具条,它似乎像NativeApp一样运行在一个单独的容器中。是这样的:接下来,我们将在本系列上一篇《2018,开始你的PWA学习之旅》中提到的一个普通WebApp的demo的基础上进行改造,实现PWA的这种效果。或者直接从github的仓库clonelearning-pwa(https://github.com/alienzhou/...)。切换到manifest分支可以看到本文的最终结果。2.WebAppManifestManifest是一个JSON格式的文件。你可以理解为一个列表,指定了WebApp桌面图标、名称、开屏图标、运行模式等一系列资源。清单的目的是将Web应用程序安装到设备的主屏幕,为用户提供更快的访问和更丰富的体验。——MDN看一下learning-pwa中manifest.json文件的内容{"name":"BookSearch","short_name":"BookSearch","start_url":"/","display":"standalone","background_color":"#333","description":"一个查书的小WebAPP(基于豆瓣开放接口)","orientation":"portrait-primary","theme_color":"#5eace0","icons":[{"src":"img/icons/book-32.png","sizes":"32x32","type":"image/png"},{"src":"img/icons/book-72.png","sizes":"72x72","type":"image/png"},{"src":"img/icons/book-128.png","sizes":"128x128","type":"image/png"},{"src":"img/icons/book-144.png","sizes":"144x144","type":"image/png"},{"src":"img/icons/book-192.png","sizes":"192x192","type":"image/png"},{"src":"img/icons/book-256.png","sizes":"256x256","type":"image/png"},{"src":"img/icons/book-512.png","sizes":"512x512","type":"image/png"}]}可以看出上面的JSON配置文件非常直观,通过声明每个属性的值,我们就可以改造我们的WebApp。然后我们会执行具体的取值对每个简单介绍一下。2.1.name,short_name指定WebApp的名称,short_name其实是application的缩写,一般来说,当没有足够的空间显示应用程序的名称时,系统会使用short_name,可以看这篇文章中的例子,在桌面上显示的BookSearchapp的名字是short_name书茶2.2.start_url属性指定了用户打开WebApp时加载的URL,相对URL将会相对于manifest,这里我们指定start_url为/,访问根目录2.3.displaydisplay控制应用的显示方式,它有四个值可以选择:fullscreen、standalone、minimal-ui和browser。fullscreen:全屏显示,会尽可能填满所有显示区域;standalone:独立应用模式,该模式下打开的应用有自己的启动图标,不会有浏览器的地址栏。因此,它看起来更像是一个NativeApp;minimal-ui:与standalone相比,这种模式会更开放地址栏;浏览器:一般来说,会以和普通浏览器一样的风格打开。下面我们来看看这四种模式的区别:当然,不同系统显示的具体风格也不完全相同。Like示例中的虚拟按钮将在全屏模式下默认隐藏。2.4.orientation控制Web应用程序的方向。设置一定的值会有锁屏效果(不旋转),比如例子中的portrait-primary。具体值包括:any、natural、landscape、landscape-primary、landscape-secondary、portrait、portrait-primary、portrait-secondary。2.5.icons,background_coloricons用于指定应用程序的桌面图标。icons本身是一个数组,每个元素包含三个属性:sizes:图标的大小。通过指定大小,系统会选择最合适的图标显示在相应的位置。src:图标的文件路径。请注意,相对路径是相对于清单的。type:图标的图像类型。需要指出的是,我一直说的“开屏图”其实是背景色+图标的显示方式(并没有设置所谓的开屏图)。background_color是应用样式资源加载前的默认背景,所以会显示在屏幕打开界面上。background_color加上我们刚刚定义的图标,就构成了打开WebApp时的“屏幕图像”。2.6.theme_color定义应用程序的默认主题颜色。这有时会影响操作系统显示应用程序的方式(例如,在Android的任务切换器上,主题颜色环绕应用程序)。另外,还可以在meta标签中设置theme_color:2.7。description字段的意思很简单,就是对应用的描述。3.使用Manifest创建好manifest文件之后,接下来就是要知道如何让我们的WebApp使用它了——很简单,只需要在head中添加一个link标签即可:这样在android上,我们使用chrome将应用添加到桌面,在开始的时候会有PWA效果文章。你可以在这里验证manifest.json的内容:WebManifestValidator看到这里,恭喜你,你已经知道如何让我们的WebApp看起来更像一个独立的NativeApp了。是不是很简单?4.iOS、Windows?上面的一切看起来都很美好,但事实真的如此吗?到目前为止,我们已经完成了相当不错的工作:创建manifest.json、添加元标记以及将我们的Web应用程序添加到桌面。但是,如果我们使用iPhone访问我们的网站,然后“添加到主屏幕”,您会看到-一切都不起作用!是的,你没看错,一切都恢复原样了。如果你在caniuse上看过manifest的兼容性,那你就更头疼了。不过,也不用太难过。在iOS和Windows上,我们还有其他方法。5.iOS(safari)中的处理方式虽然safari不支持WebAppManifest,但是它有自己的一些head标签来定义对应的资源和显示形式:apple-touch-icon:桌面图标,通过添加在头部。也可以添加sizes属性,指示系统在各种平台(iphone、ipad...)上使用最合适的iconapple-mobile-web-app-title:应用程序的标题。注意需要使用meta标签apple-mobile-web-app-capable:类似manifest中显示的功能,设置为yes可以进入standalone模式,也是meta标签apple-mobile-web-app-status-bar-style:这将改变iOS移动设备状态栏的样式,并且仅在独立模式下有效。,但在iPhoneX上黑色会导致状态栏不显示任何内容。以下是learning-pwa项目中的相关设置6.IE中的处理方式和Safari类似,IE也有自己的meta标签来表示对应的资源。比较重要的有:application-name:指定应用程序的名称msapplication-TileColor:指定“tile”的背景颜色msapplication-xxxlogo:不同大小的“tiles”使用的图标,包括这些类型:msapplication-square70x70logo,msapplication-square150x150logo,msapplication-wide310x150logo,msapplication-square310x310logo以下是learning-pwa项目中的相关设置,其中图标设置复用了已有的图标文件,方便使用写在最后这篇文章主要探讨如何让添加到桌面的WebApp有更接近NativeApp的体验(桌面图标、屏幕打开页面、shell...)。所以我们使用了WebAppManifest。我们可以通过添加manifest文件并在HTML中设置相应的meta标签来使用;而在safari和ie中,可以通过一些特有的meta和link标签来实现。是不是很简单方便?这使我们能够以非常低的成本更改我们的WebApp。这就是PWA概念的思路之一:你可以逐步完善WebApp的能力,同时在兼容性方面,也会根据不同浏览器的支持,提供渐进增强的能力。好了,本文的内容就到这里了。希望你喜欢!同时,如果你想了解更多PWA背后的相关技术,欢迎关注《精益前端》专栏。《PWA学习与实践》系列文章第1部分:2018,开启你的PWA学习之旅第2部分:10分钟学会使用Manifest让你的WebApp更“原生”(本文)参考WebAppManifest(MDN)ConfiguringWebApplications(Safari)Pinnedsiteenhancements(InternetExplorer))caniusemanifestWebManifestValidatorAddressBarMatchesBrandColorsdemo代码地址:learning-pwa/tree/manifest