如何检测PWA是否已经安装?

手头的项目有个需求需要检测PWA是否已经安装,安装了导航下载就不显示,没有安装就需要显示。在网上找了蛮久,也问了chatgpt,主要提供以下三种方法,

1、判断 navigator.getInstalledRelatedApps() 是否有返回值

此方法需要在 PWA 的 manifest 里先声明 related_application,具体代码如下。

// manifest.webmanifest文件
{"name": "TestApp","short_name": "TestApp","start_url": "https://example.com","display": "standalone","background_color": "#181818","theme_color": "#181818","icons": [{"sizes": "192x192","src": "https://xxx.png","type": "image/png"}],related_applications": [{"platform": "webapp","url": "https://example.com","id": "com.example.app"}]
}// 入口判断
if (navigator.getInstalledRelatedApps) {navigator.getInstalledRelatedApps().then(apps => {if (apps.length > 0) {console.log('Found installed related apps:', apps);} else {console.log('No related apps installed.');}}).catch(error => {console.error('Error fetching installed apps:', error);});
} else {console.log('getInstalledRelatedApps is not supported on this browser.');
}

当时我加了 related_applications 字段后,navigator.getInstalledRelatedApps() 返回的还是一个空数组,不知道是不是姿势不对。有兴趣的小伙伴可以自己尝试以下。

2、在 iOS 上,通过 navigator.standalone 属性可以检测 PWA 是否已添加到主屏幕。

function inPwa () {return window.matchMedia('(display-mode: standalone)').matches)  || window.navigator.standalone || document.referrer.includes('android-app://')
}

此方法我试过,H5页面不能判断成功,但是在打开的PWA程序中是有效的。

3、监听 beforeinstallprompt 判断是否安装

store.state.isPwaInstalled = true
window.addEventListener('beforeinstallprompt', (e) => {console.log('PWA 未安装')e.preventDefault()window.deferredPrompt = estore.state.isPwaInstalled = false;
})// 如果没有触发 beforeinstallprompt,则说明可能已被安装
window.addEventListener('appinstalled', () => {store.state.isPwaInstalled = true;
});

这个方法我一直误以为是在点击安装PWA的时候才会判断,实际上每次进入主入口都会监听beforeinstallprompt,所以可以先默认为已经下载了PWA,然后监听beforeinstallprompt,如果能监听到说明当前没有下载PWA,否则就保持默认已经下载了。还可以增加监听appinstalled,当前点击下载以后将下载弹窗隐藏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498756.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云Welink数据怎么连接到小满CRM?

Welink是什么?好用吗? 华为云WeLink是华为内部打磨多年的协同办公平台、远程办公软件、移动办公平台、协同办公软件,来源华为19万员工的数字化办公实践,融合多屏协同、打卡、报销、考勤、审批、企业网盘、IM消息、邮件、视频会议…

借助 FinClip 跨端技术探索鸿蒙原生应用开发之旅

在当今数字化浪潮汹涌澎湃的时代,移动应用开发领域正经历着深刻的变革与创新。鸿蒙操作系统的崛起,以其独特的分布式架构和强大的性能表现,吸引了众多开发者的目光。而FinClip 跨端技术的出现,为开发者涉足鸿蒙原生应用开发提供了…

IDEA+Docker一键部署项目SpringBoot项目

文章目录 1. 部署项目的传统方式2. 前置工作3. SSH配置4. 连接Docker守护进程5. 创建简单的SpringBoot应用程序6. 编写Dockerfile文件7. 配置远程部署 7.1 创建配置7.2 绑定端口7.3 添加执行前要运行的任务 8. 部署项目9. 开放防火墙的 11020 端口10. 访问项目11. 可能遇到的问…

Excel文件恢复教程:快速找回丢失数据!

Excel文件恢复位置在哪里? Excel是微软开发的电子表格软件,它为处理数据和组织工作提供了便捷。虽然数据丢失的问题在数字时代已经司空见惯,但对于某些用户来说,恢复未保存/删除/丢失的Excel文件可能会很困难,更不用说…

pyinstaller打包exe可执行文件

cd命令符进入要打包文件路径下,执行: 1.打包单个py文件,在控制台执行;dist下会生成2个文件,一个是exe文件 pyinstaller -D happy.py (cd命令符进入要打包文件路径下,执行) 打包单个py文件,在控制台执行;…

PDF怎么压缩得又小又清晰?5种PDF压缩方法

PDF 文件在日常办公与学习中使用极为频繁,可想要把它压缩得又小又清晰却困难重重。一方面,PDF 格式本身具有高度兼容性,集成了文字、图像、矢量图等多样元素,压缩时难以兼顾不同元素特性,稍不注意,文字就会…

【C++】B2083 画矩形

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述题目详情输入示例:输出示例: 💯学生初始作品分析学生代码分析此代码主要思路:代码之优缺 💯老师初始解法…

记录第一次跑YOLOV8做目标检测

今天是24年的最后一天,终于要向新世界开始破门了,开始深度学习,YOLO来敲门~ 最近做了一些皮肤检测的功能,在传统的处理中经历了反复挣扎,终于要上YOLO了。听过、看过,不如上手体会过~ 1、YOLO是什么&#x…

动手做计算机网络仿真实验入门学习

打开软件 work1 添加串行接口模块,先关电源,添加之后再开电源 自动选择连接 所有传输介质 自动连接 串行线 绿色是通的,红色是不通的。 显示接口。se是serial串行的简写。 Fa是fast ethernet的简写。 为计算机配置ip地址: 为服…

ROS2软件架构全面解析-学习如何设计通信中间件框架

前言 ROS(Robot Operating System) 2 是一个用于开发机器人应用的软件平台,也称为机器人软件开发工具包 (SDK)。 ROS2是ROS1的迭代升级版本 ,最主要的升级点是引入DDS(Data Distribution Service)为基础的…

Java基础知识(五) -- 枚举、注解和异常

1.枚举(enum) 1.1 概述 枚举对应英文(enumeration, 简写 enum), 枚举是一组常量的集合。枚举属于一种特殊的类,里面只包含一组有限的特定的对象。 1.2 枚举实现方式 自定义类实现枚举 使用 enum 关键字实现枚举 1.3 自定义类实现枚举 1.3.1 概述 ① 不需要提供…

《HelloGitHub》第 105 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…

MAC系统QT图标踩坑记录

MAC系统QT图标踩坑记录 1. 准备图标1.1 方法一:下载准备好的图标1.2 方法二:自己生成图标1.2.1 准备一个png文件1.2.2 用sips生成不同大小的图片1.2.3 用iconutil生成图标文件 2. 配置图标2.1. 把图标改命成自己想要的名字,如icon.icns&#…

XML解析

一、XML概述 1,什么是XML? XML即为可扩展的标记语言(eXtensible Markup Language)XML是一套定义语义标记的规则,这些标记将文档分为许多部件并对这些部件加以标识 2.XML和HTML不同之处 XML主要用于说明文档的主题,而HTML侧重描…

人工智能知识分享第四天-线性回归

线性回归 线性回归介绍 线性回归概念 线性回归(Linear regression)是利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 注意事项: 1 为什么叫线性模型?因为求解的w,都是w的零次幂&am…

从零开始采用命令行创建uniapp vue3 ts springboot项目

文章目录 1,通过命令行创建uniapp vue3 ts项目2, 创建springboot后台项目3, 联调测试 1,通过命令行创建uniapp vue3 ts项目 ​ 官方通过命令行创建项目的地址:https://zh.uniapp.dcloud.io/quickstart-cli.html ​ 在执行下面操…

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具)

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具) 核心代码完整代码在线示例 地球中展示视频可以通过替换纹理的方式实现,但是随着摄像头和无人机的流行,需要视频和场景深度融合,简单的实现方…

Tabby设计架构介绍

Tabby设计架构介绍 总体架构 tabby是一个开源的代码编写助手,其功能还是比较强大。本文分析了一下它的架构组成。 架构说明 分成3层: 大模型层:主要提供各种类型的大模型。不同时刻需要使用的不同大模型。 服务层:基于大模型提…

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx(具有两个sheet)2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …

“进制转换”公式大集合

咱们都知道十进制是“逢10进1 ”,同理,N进制就是 “逢N进1”。进制其实就这么简单。它的麻烦之处在于各种进制之间的转换。 一、十进制整数转N进制 1.十进制转二进制 除2取余法:连续除以2,直到商为0,逆序…