首页 > 其他分享 >Spartacus 添加 PWA 应用到 home 的实现原理分析

Spartacus 添加 PWA 应用到 home 的实现原理分析

时间:2023-08-17 19:58:19浏览次数:45  
标签:Spartacus canPrompt beforeinstallprompt 用户 添加 PWA home 屏幕

代码位置:https://github.com/SAP/spartacus/blob/develop-6.4.x/projects/storefrontlib/cms-structure/pwa/services/add-to-home-screen.service.ts

这段Angular代码是一个用于添加到主屏幕(Add to Home Screen)功能的服务,它是为Spartacus项目中的PWA模块设计的。PWA代表Progressive Web App,是一种结合了网页和本地应用特性的Web应用程序。

该代码位于一个名为AddToHomeScreenService的可注入(Injectable)类中,该类提供了一系列功能来管理“添加到主屏幕”功能。下面将详细解释代码的各个部分及其功能。

  1. 模块导入和依赖注入

    • 通过import语句,引入了必要的Angular模块和Spartacus模块,包括@angular/core@spartacus/core等。
    • 在类的构造函数中,通过依赖注入获得了PWAModuleConfigGlobalMessageServiceWindowRef等实例,这些将在后续代码中使用。
  2. AddToHomeScreenService类定义

    • 通过@Injectable装饰器,将这个类标记为一个可注入的服务,可以在整个应用中使用。
    • 定义了一个受保护的成员变量deferredEvent,用于存储beforeinstallprompt事件对象。
    • 定义了一个canPromptBehaviorSubject,用于跟踪是否可以提示用户添加到主屏幕。
    • 声明了一个canPrompt$Observable,提供了对canPrompt状态的订阅。
  3. 构造函数

    • 构造函数接受PWAModuleConfigGlobalMessageServiceWindowRef等依赖。
    • 在构造函数内部,如果配置中启用了addToHomeScreen功能(通过this.config.pwa?.addToHomeScreen的判断),则调用init()方法。
  4. init()方法

    • 在初始化方法中,通过this.winRef.nativeWindow判断浏览器是否提供了nativeWindow对象。
    • 如果提供了,通过addEventListener绑定了beforeinstallpromptappinstalled事件的处理函数。
    • beforeinstallprompt事件处理函数阻止了默认行为,并将事件对象存储到deferredEvent中,然后调用enableAddToHomeScreen()方法。
    • appinstalled事件处理函数会在应用程序被成功安装后触发,显示确认消息后,调用disableAddToHomeScreen()方法将canPrompt设置为false,并将deferredEvent重置为null
  5. 其他方法

    • enableAddToHomeScreen()方法将canPrompt的值设置为true,表示可以提示用户添加到主屏幕。
    • disableAddToHomeScreen()方法将canPrompt的值设置为false,表示不再提示用户添加到主屏幕。
    • firePrompt()方法会检查deferredEvent是否存在,如果存在,则调用prompt()方法来触发“添加到主屏幕”的提示。

这段代码是 Angular 服务,名称为 AddToHomeScreenService,主要用于处理 PWA(Progressive Web App)的添加到主屏幕的功能。PWA 是一种可以像原生应用程序一样在用户的设备上安装和运行的网页应用程序。

首先,服务在根注入器中提供,这意味着这个服务在应用程序的整个生命周期中是单例的。它依赖于 PWAModuleConfigGlobalMessageServiceWindowRefPWAModuleConfig 似乎是用于配置 PWA 模块的服务;GlobalMessageService 用于全局消息通知;WindowRef 是对全局 window 对象的引用,以便进行跨浏览器的兼容处理。

这个服务中有一个名为 canPromptBehaviorSubject,它是一个可以发送和接收数据的对象,用于存储当前是否可以提示用户添加应用到主屏幕。同时提供了一个名为 canPrompt$Observable,其他组件可以订阅这个 Observable 来获知是否可以提示用户添加应用到主屏幕。

在服务的 constructor 构造函数中,检查了 PWAModuleConfig 中的 pwa.addToHomeScreen 配置。如果此配置为真,服务将初始化其功能。

在初始化函数 init 中,服务监听了两个全局事件:beforeinstallpromptappinstalledbeforeinstallprompt 事件是在用户可以被提示添加应用到主屏幕之前触发的。当这个事件发生时,服务会阻止事件的默认行为,存储事件对象以便稍后触发,然后调用 enableAddToHomeScreen 函数来允许提示用户。appinstalled 事件在用户将应用添加到主屏幕后触发。当这个事件发生时,服务会发送一条全局消息通知用户应用已经被添加到主屏幕,然后调用 disableAddToHomeScreen 函数禁止进一步的提示,并清除存储的事件对象。

服务还提供了 firePrompt 函数,这个函数会触发存储的 beforeinstallprompt 事件的 prompt 方法,这将显示向用户添加应用到主屏幕的提示。

标签:Spartacus,canPrompt,beforeinstallprompt,用户,添加,PWA,home,屏幕
From: https://www.cnblogs.com/sap-jerry/p/17638700.html

相关文章

  • Angular 应用启用 PWA 特性的 Angular CLI 命令行
    ngadd@angular/pwa--project<project-name>这条命令在AngularCLI中,是用于将一个标准的Angular应用程序转化为一个渐进式网页应用(PWA,ProgressiveWebApp)的命令。首先,我们需要理解PWA是什么。PWA是一种可以提供类似于原生应用体验的网页应用。它可以在离线时工作,可被......
  • PWA 应用 addToHomeScreen 功能概述
    PWA,全称为ProgressiveWebApp,即渐进式网页应用。它是一种将网页应用和原生应用相结合的新型应用模式,能够在用户没有安装应用的情况下,提供和原生应用相似的用户体验。在PWA中,addToHomeScreen是一个非常重要的功能。它允许用户将PWA应用添加到设备的主屏幕上,就像添加一个原生......
  • games101-homework-notes
    Games101作业笔记Created:2023-06-19T12:00+08:00Published:2023-08-17T16:23+08:00Categories:ComputerGraphics目录pa0hw1ProjectionMatrixTriangleRasterizerprocesshw2insidetrianglerasterize_trianglemyhw2bugs使用\(y+0.5\)setindex导致三角形分裂屏幕两......
  • N1的openwrt的docker下安装homeassistant
    docker配置Docker>配置修改默认桥接的地址为路由器ip(如果n1作为旁路由的话则则这里填写主路由的ip)获取docker镜像拉取homeassistant最新docker镜像软路由打开终端执行以下命令dockerpullhomeassistant/home-assistant:latest等代码跑完后,进入软路由系统,查看镜像出现这......
  • HomeAssistant中推荐安装的几个加载项
    1.Terminal&SSH这是一款网页终端的插件,登录到HomeAssistant后点击插件即可进入控制台,在控制台中我们可以做许多事情,如:安装HACS、添加/删除/修改文件、以及使用git命令安装各种扩展内容下面我列举一下常用命令:cp//复制文件touch//创建文件cd..//退回上一级目录cd//......
  • HomeAssistant安装HACS教程
    最近我在VMware虚拟机中安装了HomeAssistant,安装教程网上也有很多也比较简单,这次我和大家分享一下如何在HomeAssistant中安装HACS首先我们需要登录到Homeassistant的后台(默认后台:IP地址:8123)登录后我们点击右侧的用户名,然后往下拉,点击高级模式,将其置于开启状态,如图所示:然后我们再点......
  • ERROR: JAVA_HOME /root/software/jdk1.8.0_262 does not exist.问题的解决
    jdk出了点儿问题,就打算直接卸载重新安装一下预先下载好jdk的压缩包备用1、在usr目录下新建java目录mkdir/usr/java然后进入到新建的java目录下:cd/usr/java2、将已经下载好的jdk的压缩包上传到java目录下3、解压jdk压缩包tar-zxvfjdk-8u161-linux-x64.tar.gz解......
  • Oracle 安装 Failed to Create oracle Oracle Home User 解决方案
    WindowsServer2016安装Oracle12报错:FailedtoCreateoracleOracleHomeUser的解决方案:1、打开域安全策略(secpol.msc)-安全设置-账户策略-密码策略-密码必须符合复杂性要求。定义这个策略设置为:已禁用。 2、最后cmd运行刷新组策略命令为:gpupdate/force 3、重新......
  • 【错误记录】PySpark 运行报错 ( Did not find winutils.exe | HADOOP_HOME and hadoo
    文章目录一、报错信息二、解决方案(安装Hadoop运行环境)一、报错信息核心报错信息:WARNShell:Didnotfindwinutils.exe:java.io.FileNotFoundException:java.io.FileNotFoundException:HADOOP_HOMEandhadoop.home.dirareunset.在PyCharm中,调用PySpark执......
  • 创建usr local mysql在home下
    ln-s目录软链接名称......