pwa动态修改manifest.json(start_url)

pwa动态设置manifest.json

引言

在使用pwa开发时,因需求原因,需要动态设置pwa安装应用的地址,也就是manifest.json中的start_url地址,比如说业务场景需要携带不同的参数在安装地址后台,从中遇到了很多问题,以此记录下,帮你们避坑。

使用js动态修改manifest.json

刚开始的第一反应就是通过js获取到url上的参数,在pwa页面拿到url参数并动态设置到manifest.jsonstart_url上去,代码如下:

const blob = new Blob([JSON.stringify(manifest)], { type: 'application/json' });const url = URL.createObjectURL(blob);const link = document.createElement('link');link.rel = 'manifest';link.href = url;document.head.appendChild(link);

如果环境是在pc端上是可以解决这个问题的,但是你在移动端上后你会发现pwa失效了,不管还是android还是ios上,我通过chatgpt查询了下,应该是移动端上的加载策略更为严格,js
动态修改后的格式其实是Blob形式的,也许跟这个也有关系,以下是gpt给的信息。

  1. 安全策略和权限限制

移动端浏览器通常比PC端浏览器有更严格的安全策略和权限限制。这些限制可能包括:

•	Content Security Policy (CSP):移动浏览器可能对CSP有更严格的执行,禁止从不可信来源加载资源。
•	Same-Origin Policy:Blob URL在一些移动浏览器中可能被认为不符合同源策略,导致无法加载。
  1. Blob URL的处理

PC和移动端浏览器在处理Blob URL方面可能有不同的实现方式:

•	Blob URL生命周期:在一些移动浏览器中,Blob URL的生命周期可能较短或需要特定的条件才能有效。
•	支持和兼容性:某些移动浏览器可能对Blob URL的支持不完全,特别是在加载应用关键资源(如manifest文件)时。
  1. 加载顺序和缓存行为

移动端浏览器在加载和缓存资源时可能有不同的策略:

•	加载顺序:移动浏览器可能在页面加载初期即验证并请求manifest文件,如果文件是动态生成的,可能在请求时未准备好。
•	缓存行为:移动浏览器可能对动态生成的文件有不同的缓存机制,导致文件无法及时加载。

使用node.js或者java等后端语言动态生成

通过使用node等后端服务生成是可以解决在移动端不生效的问题,下面用node示例

  function createManifest() {const manifest = {name: "Dynamic PWA",short_name: "PWA",start_url: "/",display: "standalone",background_color: "#ffffff",theme_color: "#000000",icons: [{src: "/icon-192x192.png",sizes: "192x192",type: "image/png"},{src: "/icon-512x512.png",sizes: "512x512",type: "image/png"}]};// 根据需求动态修改manifest内容const theme = new URLSearchParams(window.location.search).get('theme');if (theme === 'dark') {manifest.theme_color = "#000000";} else {manifest.theme_color = "#ffffff";}const blob = new Blob([JSON.stringify(manifest)], { type: 'application/json' });const url = URL.createObjectURL(blob);const link = document.createElement('link');link.rel = 'manifest';link.href = url;document.head.appendChild(link);
}// 调用函数创建并注入manifest
createManifest();

然后将manifest.json的href设置为接口地址就行

  <link rel="manifest" href="http://" />

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

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

相关文章

CSDN智能总结助手

github项目地址&#xff1a; https://github.com/anjude/little-demo/tree/master 获取CSDN的user name和user token 打开csdn&#xff0c;打开控制台 - Application - Cookies&#xff0c;找到domain为blog.csdn.net的cookie&#xff0c;复制user_name和user_token的值 把上…

最详细Linux提权总结(建议收藏)

1、内核漏洞脏牛提权 查看内核版本信息 uname -a 具体提权 1、信息收集配合kali提权 uname -a #查看内核版本信息 内核版本为3.2.78&#xff0c;那我们可以搜索该版本漏洞 searchsploit linux 3.2.78 找到几个可以使用的脏牛提权脚本&#xff0c;这里我使用的是40839.c脚…

11.客户端-文件上传、文件下载的实现

本章主要模拟终端设备通过事先制定的协议向服务端请求文件上传、文件下载的操作。 示例代码: 1.客户端分段读取文件发送至服务端 private static void input(String path) {// 时间戳,唯一ID标记long id = System.currentTimeMillis();File file = new File(path);long le…

独立乙游井喷成新趋势,真来抢市场还是只画大饼?

国产乙游市场又迎来了新变化。 进入5月份&#xff0c;独立乙女游戏如雨后春笋般冒了出来&#xff0c;两、三个人组成的制作组&#xff0c;没有任何程序协助和资金支持&#xff0c;全靠为爱发电来打造一款乙女游戏&#xff0c;成为了今夏乙游市场的新趋势。 目前已经有独立乙游…

【Java】在高并发场景下,保证 Redis 缓存一致性的几种方案

在高并发场景下&#xff0c;保证 Redis 缓存一致性是一个常见的挑战。以下是几种常见的解决方案及其优缺点&#xff0c;以及相应的代码示例。 1. Cache Aside Pattern (旁路缓存模式) 原理 读取数据时&#xff0c;先读缓存&#xff0c;如果缓存没有命中&#xff0c;再从数据…

SwiftUI 5.0(iOS 17)进一步定制 TipKit 外观让撸码如虎添翼

概览 在之前 SwiftUI 5.0&#xff08;iOS 17&#xff09;TipKit 让用户更懂你的 App 这篇博文里&#xff0c;我们已经初步介绍过了 TipKit 的基本知识。 现在&#xff0c;让我们来看看如何进一步利用 SwiftUI 对 TipKit 提供的细粒度外观定制技巧&#xff0c;让 Tip 更加“明眸…

蓝桥杯第十四届国赛B组刷题笔记

A-0子2023&#xff1a; 题目&#xff1a; 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; &#x1d446;12345678910111213...20222023S12345678910111213...20222023。 小蓝想知道 &#x1d446;S 中有多少种子序列恰好等…

邦芒简历:简历自检指南,让你的求职之路更顺畅

当你精心完成一份简历后&#xff0c;是否曾想过再仔细审视一遍&#xff1f;一份完美的简历不仅是求职的敲门砖&#xff0c;更是展示你专业素养和个人魅力的窗口。为了让你在求职过程中脱颖而出&#xff0c;我们为你提供以下自检指南&#xff0c;帮助你完善简历&#xff0c;提高…

用Python爬取百度搜索结果并保存

项目目标 爬取百度上关键字为“粮食”的搜索结果&#xff0c;并保存&#xff0c;提交给客户&#xff0c;用于进一步分析我国粮食政策。 项目准备 软件&#xff1a;PyCharm 需要的库&#xff1a;json&#xff0c; requests&#xff0c;etree 项目分析 1&#xff09;如何进行…

人工智能应用层岗位—AI项目经理/AI产品经理

AI是一门技术&#xff0c;最终落实成产品才能具备商业价值 应用层&#xff0c;就是面向特定应用场景&#xff0c;形成人工智能软硬件产品或解决方案。主要包括行业AI解决方案和热门产品&#xff0c;如自动驾驶、机器人、智能家居、可穿戴的智能设备等 相应的&#xff0c;就会…

【算法】排序

排序算法在信息学非常常用。Hello&#xff01;大家好&#xff0c;我是学霸小羊&#xff0c;今天讲几个排序算法。 1.“打擂台”排序 思路&#xff1a;a[ i ]和a[ j ]打擂台&#xff08;i<j&#xff09;。 这个方法简单易懂&#xff0c;只需要看看需不需要交换。按从大到小…

element ui 的el-input输入一个字后失去焦点,需重新点击输入框才能再次输入!

解决方案&#xff1a; 我是form表单嵌套表格&#xff0c;里面的el-input输入框&#xff0c;输入第一个值的时候会突然失去焦点&#xff0c;需要再次点击输入框才能正常输入&#xff0c;原因是table的key值&#xff0c;需要改成正常的index即可&#xff0c;如果你是循环的&…

阿里云物联网平台python ADK 发布/订阅

基础知识学习参考&#xff1a; 1、使用消息通讯Topic 2、python link SDK 一、环境变量配置 1、python3.6&#xff1a;下载安装 2、安装paho-mqtt 1.4.0版本 pip install paho-mqtt1.4.03、安装安装Link SDK最新版本 pip install aliyun-iot-linkkit 4、下载python ADK…

elementui table 回显的时候勾选状态消失 分页切换的时候table的选中状态会被重置

<el-table v-loading"loading2" ref"multipleTable" :data"reportList" sort-change"handleReportSortChange" selection-change"handleReportSelectionChange">回显代码getReportList(){ //table列表的值this.loadin…

python-编写函数判断一个三位数是否为水仙花数。

【问题描述】要求编写函数isflower(n)判断一个三位数n是否为水仙花数,如果是&#xff0c;则返回True&#xff0c;否则返回False。在主程序中要求调用该函数并输出三位数中所有的水仙花数。所谓"水仙花数"是指一个3位数&#xff0c;其各位数字立方和等于该数本身。例如…

VirtualBox安装ubuntu22.04记录

一,VirtualBox 软件安装 虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 常见的虚拟机软件主要有两款 VMware 和 VirtualBox 。VMwar…

Redis主从哨兵架构的故障转移

Redis主从哨兵架构的故障转移是一个确保系统高可用性的重要过程。以下是该过程的主要步骤和关键信息&#xff1a; 1. 哨兵监控与检测 主服务器失效检测&#xff1a;哨兵节点通过定期&#xff08;如每秒&#xff09;向主服务器发送PING命令来检测其是否可连接。如果主服务器在…

【最新区块链论文录用资讯】CCF A—FSE 2024 共4篇 附pdf

Conference&#xff1a;ACM International Conference on the Foundations of Software Engineering (FSE) CCF level&#xff1a;CCF A Categories&#xff1a;软件工程/系统软件/程序设计语言 Year&#xff1a;2024 Num&#xff1a;4 1 Title: Demystifying Invariant …

华纳云:在一个服务器上如何设置多个IP地址?

在一个服务器上设置多个IP地址的具体步骤取决于所使用的操作系统(例如Linux或Windows)。以下是如何在这两个常见操作系统上配置多个IP地址的简要指南&#xff1a; 在Linux上设置多个IP地址 1. 修改网络配置文件 以CentOS/RHEL为例&#xff0c;编辑网络接口配置文件。假设我们要…

项目启动 | 晟泰克再度牵手盘古信息,引入IMS V6系统实现数字化深度推进

当前&#xff0c;中国汽车零部件行业的数字化转型正在快速推进&#xff0c;数字化工业软件已经广泛应用于汽车零部件的研发、生产和服务等各个环节&#xff0c;赋能行业实现降本减存&#xff0c;提质增效&#xff0c;有力推动了行业高质量发展。 成立于2003年的合肥晟泰克汽车…