uniapp 使用vue/pwa

vue add @vue/pwa

src下创建service-worker.js

/* eslint-disable no-undef*/
importScripts('https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js')
if (workbox) {console.log(`Yay! Workbox is loaded 🎉`)
} else {console.log(`Boo! Workbox didn't load 😬`)
}workbox.core.setCacheNameDetails({prefix: 'ochase-search',suffix: 'v1.0.0'
})
workbox.core.skipWaiting() // 强制等待中的 Service Worker 被激活
workbox.core.clientsClaim() // Service Worker 被激活后使其立即获得页面控制权
workbox.precaching.precacheAndRoute(self.__precacheManifest || []) // 设置预加载// 缓存web的css资源
workbox.routing.registerRoute(// Cache CSS files/.*\.css/,// 使用缓存,但尽快在后台更新new workbox.strategies.StaleWhileRevalidate({// 使用自定义缓存名称cacheName: 'css-cache'})
)// 缓存web的js资源
workbox.routing.registerRoute(// 缓存JS文件/.*\.js/,// 使用缓存,但尽快在后台更新new workbox.strategies.StaleWhileRevalidate({// 使用自定义缓存名称cacheName: 'js-cache'})
)// 缓存web的图片资源
workbox.routing.registerRoute(/\.(?:png|gif|jpg|jpeg|svg)$/,new workbox.strategies.StaleWhileRevalidate({cacheName: 'images',plugins: [new workbox.expiration.ExpirationPlugin({maxEntries: 60,maxAgeSeconds: 30 * 24 * 60 * 60 // 设置缓存有效期为30天})]})
)// 如果有资源在其他域名上,比如cdn、oss等,这里做单独处理,需要支持跨域
workbox.routing.registerRoute(/^https:\/\/cdn\.ochase\.com\/.*\.(jpe?g|png|gif|svg)/,new workbox.strategies.StaleWhileRevalidate({cacheName: 'cdn-images',plugins: [new workbox.expiration.ExpirationPlugin({maxEntries: 60,maxAgeSeconds: 5 * 24 * 60 * 60 // 设置缓存有效期为5天})],fetchOptions: {credentials: 'include' // 支持跨域}})
)

在main.js 添加代码

// #ifdef VUE3
import './src/registerServiceWorker'if ('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/src/service-worker.js').then(registration => {console.log('Service Worker registered with scope:', registration.scope);}).catch(error => {console.error('Service Worker registration failed:', error);})})
}import { createSSRApp } from 'vue'
export function createApp() {const app = createSSRApp(App)return {app}
}
// #endif

在pulic添加 manifest.json

{"short_name": "name","name": "name","icons": [{"src": "/static/logo.png","type": "image/png","sizes": "72x72"},{"src": "/static/2.png","type": "image/png","sizes": "320x320"}],"id": "/?source=pwa","start_url": "index.html","background_color": "#3367D6","display": "standalone","scope": "/","theme_color": "#3367D6","shortcuts": [{"name": "","short_name": "","description": "","url": "/today?source=pwa","icons": [{ "src": "/static/1.png", "sizes": "96x96" }]},{"name": "","short_name": "","description": "","url": "/tomorrow?source=pwa","icons": [{ "src": "/static/1.png", "sizes": "96x96" }]}],"description": "","screenshots": [{"src": "","type": "image/png","sizes": "320x320","form_factor": "narrow"},{"src": "","type": "image/jpg","sizes": "320x320","form_factor": "wide"}]
}

在index.html添加

//主题颜色		
<meta name="theme-color" content="#00142A">
//引入manifest.json
<link rel="manifest" href="/public/manifest.json" />

然后运行  支持https协议和localhost

判断当前处于h5 或者pwajianti

<script setup>import { onMounted } from 'vue'onMounted(() => {console.log(checkIfPWA() ? 'PWA 模式' : 'H5 模式');if (checkIfPWA()) {uni.navigateTo({url: '/pages/live/index'})} else {uni.navigateTo({url: '/pages/pwa/index'})}})const checkIfPWA = () => {return (window.matchMedia('(display-mode: standalone)').matches ||window.navigator.standalone === true ||document.referrer.startsWith('android-app://'))}
</script>

 

监听下载事件

onMounted(() => {window.addEventListener('beforeinstallprompt', (event) => {// 防止浏览器默认的安装提示event.preventDefault()installPromptEvent.value = event;  // 保存事件对象console.log('安装事件已保存:', installPromptEvent.value)})
})const install = () => {if (installPromptEvent.value) {// 显示pwa安装提示installPromptEvent.value.prompt()// 监听用户选择结果installPromptEvent.value.userChoice.then((choiceResult) => {if (choiceResult.outcome === 'accepted') {console.log('用户接受了安装')} else {console.log('用户拒绝了安装')}installPromptEvent.value = null});} else {console.log('安装事件不可用')}}

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

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

相关文章

Java 实现接口幂等的九种方法:确保系统稳定性与数据一致性

摘要&#xff1a; 在分布式系统中&#xff0c;接口的幂等性至关重要&#xff0c;它能确保重复请求不会导致意外的副作用。本文深入探讨了 Java 实现接口幂等的九种方法&#xff0c;包括数据库唯一约束、状态机、分布式锁等&#xff0c;并通过详细的代码示例和实际应用场景&…

让Erupt框架支持.vue文件做自定义页面模版

Erupt是什么&#xff1f; Erupt 是一个低代码 全栈类 框架&#xff0c;它使用 Java 注解 动态生成页面以及增、删、改、查、权限控制等后台功能。 零前端代码、零 CURD、自动建表&#xff0c;仅需 一个类文件 简洁的注解配置&#xff0c;快速开发企业级 Admin 管理后台。 提…

如何优雅处理异常?处理异常的原则

前言 在我们日常工作中&#xff0c;经常会遇到一些异常&#xff0c;比如&#xff1a;NullPointerException、NumberFormatException、ClassCastException等等。 那么问题来了&#xff0c;我们该如何处理异常&#xff0c;让代码变得更优雅呢&#xff1f; 1 不要忽略异常 不知…

OCR与PaddleOCR介绍

OCR技术与PaddleOCR的介绍 在数字化时代&#xff0c;光学字符识别&#xff08;OCR&#xff0c;Optical Character Recognition&#xff09;技术变得越来越重要。OCR技术可以将图像中的文本转换为可编辑和可搜索的文本格式&#xff0c;广泛应用于文档数字化、自动化数据输入、车…

DBAPI连接阿里云 maxcompute 报错

使用正确的驱动包 访问以下链接寻找驱动包 https://github.com/aliyun/aliyun-odps-jdbc/releases/tag/v3.4.3 注意要使用odps-jdbc-3.4.3-jar-with-dependencies.jar &#xff0c;这个是完整的jar包 不要使用odps-jdbc-3.4.3.jar&#xff0c;这个不是完整的&#xff0c;它还…

2024最新Python安装教程+Pycharm安装教程【附安装包】

Python安装 1.首先下载好Python安装包 获取方式&#xff1a;点击这里&#xff08;扫描神秘②薇码免下载&#xff09;完全免费&#xff01;&#xff01;&#xff01; 2.打开安装包&#xff0c;先勾选最下面两个选项&#xff0c;再选择第二个自定义安装 3.这里默认全选&#xff…

Fatal error: Uncaught Error: Call to undefined function mysql_connect() 解决办法详细

情况一 Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /www/wwwroot/www.ygwzjs.cn/dg_upload/class/db_sql.php:72 Stack trace: #0 /www/wwwroot/www.ygwzjs.cn/dg_upload/class/combakfun.php(192): do_dbconnect_common(localhost, , guiz…

【数据库】elasticsearch

1、架构 es会为每个索引创建一定数量的主分片和副本分片。 分片&#xff08;Shard&#xff09;&#xff1a; 将索引数据分割成多个部分&#xff0c;每个部分都是一个独立的索引。 主要目的是实现数据的分布式存储和并行处理&#xff0c;从而提高系统的扩展性和性能。 在创建索…

Oracle 第19章:高级查询技术

在Oracle数据库中&#xff0c;高级查询技术是数据库管理员和开发人员必须掌握的重要技能。这些技术能够帮助优化查询性能&#xff0c;简化复杂的查询逻辑&#xff0c;并提高数据处理的效率。本章将重点讨论两个关键概念&#xff1a;子查询和连接与并集操作。 子查询 定义: 子…

JAVA基础:数组 (习题笔记)

一&#xff0c;编码题 1&#xff0c;数组查找操作&#xff1a;定义一个长度为10 的一维字符串数组&#xff0c;在每一个元素存放一个单词&#xff1b;然后运行时从命令行输入一个单词&#xff0c;程序判断数组是否包含有这个单词&#xff0c;包含这个单词就打印出“Yes”&…

pytoch单卡改多卡ddp训练

参考&#xff1a;https://blog.csdn.net/weixin_44966641/article/details/121872773 单卡代码&#xff0c;启动代码 python train.py&#xff1a; import torch import torch.nn as nn from torch.optim import SGD from torch.autograd import Variable from torch.utils.da…

【学习】使用webpack搭建react项目

前言 在日常工作中&#xff0c;我大多是在已有的项目基础上进行开发&#xff0c;而非从头构建项目。因此&#xff0c;我期望通过本次学习能填补我在项目初始化阶段知识的空白&#xff0c;与大家共同进步。在此过程中&#xff0c;我欢迎并感激任何指正或建议&#xff0c;无论是…

什么是人工智能体?

人工智能体&#xff08;AI Agent&#xff09;是指能够感知环境、做出决策并采取行动以实现特定目标的自主实体。以下是对人工智能体的具体介绍&#xff1a; 定义与核心概念 智能体的定义&#xff1a;智能体&#xff0c;英文名为Agent&#xff0c;是指具有智能的实体&#xff0…

【笔记】前后端互通中前端登录无响应

后来的前情提要 &#xff1a; 后端的ip地址在本地测试阶段应该设置为localhost 前端中写cors的配置 后端也要写cors的配置 且两者的url都要为localhost 前端写的baseUrl是指定对应的后端的ip地址以及端口号 很重要 在本地时后端的IP的地址也必须为本地的 F12的网页报错是&a…

【初阶数据结构篇】链式结构二叉树(续)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

跨平台Flutter 、ReactNative 开发原理

一、跨平台Flutter开发原理 Flutter是一个跨平台的应用程序开发框架&#xff0c;它允许你使用一组代码库来构建同时运行在Android和iOS上的应用程序。 1.1.Flutter的核心原理基于以下几点&#xff1a; Dart异步、Widget构建块灵活配置、自工化工具链、热重载、Skia图库、Dar…

二叉树 最大深度(递归)

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…

python机器人Agent编程——实现一个本地大模型和爬虫结合的手机号归属地天气查询Agent

目录 一、前言二、准备工作三、Agent结构四、python模块实现4.1 实现手机号归属地查询工具4.2实现天气查询工具4.3定义创建Agent主体4.4创建聊天界面 五、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源ps3.wifi小车控制相关…

python安装selenium,geckodriver,chromedriver

安装浏览器 找到浏览器的版本号 chrome 版本 130.0.6723.92&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; firfox 116.0.3 (64 位)&#xff0c;但是后面运行的时候又自动更新到了 127.0.0.8923 安装selenium > pip install selenium > pip show …

基于SSM+uniapp的营养食谱系统+LW参考示例

1.项目介绍 功能模块&#xff1a;用户管理、年龄类型管理、阶段食谱管理、体质类型管理、季节食谱管理、职业食谱管理等系统角色&#xff1a;管理员、普通用户技术栈&#xff1a;SSM&#xff0c;uniapp&#xff0c; Vue等测试环境&#xff1a;idea2024&#xff0c;HbuilderX&a…