react实现把pc网站快捷添加到桌面快捷方式

news2024/10/5 14:45:22

文章目录

  • 1. 需求
  • 2. 实现效果
  • 3. 核心逻辑
  • 4. 完整react代码

1. 需求

这种需求其实在国外一些游戏网站和推广网站中经常会用到,目的是为了让客户 快捷方便的保存网站到桌面 ,网站主动尽量避免下次找不到网站地址了,当然精确的客户自己也可以使用浏览器的收藏功能去收藏

2. 实现效果

  1. 下面 gif 效果我们可以看到默认进去会弹窗一个提示,提示用户进行网站安装到桌面的提示效果
    请添加图片描述

  2. 当我们点击 安装 后,会马上单独开一个窗口(这个窗口和普通的浏览器弹窗有点不一样,类似于一个Electron),并且会保存到桌面,展示快捷方式
    在这里插入图片描述

  3. 测试:打开电脑 应用 -> 安装的应用,也可以看到,这个网站地址也被安装到应用上了
    在这里插入图片描述

3. 核心逻辑

window.deferredPrompt?.prompt

const installApp = () => {
   clearTimeout(timeOut);
   window.deferredPrompt?.prompt().then(() => {
       showInstallSet(false);
   });
   showInstallSet(false);
};

4. 完整react代码

  1. 新建一个 GuideDown 组件,实现代码如下,代码内容其实很简单,这边不做过多详解
import React, {useEffect, useState} from 'react';
import {observer} from 'mobx-react-lite';
import {CloseOutline} from 'antd-mobile-icons';
import {Divider} from 'antd';
import {Button} from 'antd-mobile';
import {useTranslation} from 'react-i18next';

let timeOut = null;
const GuideDown = () => {
    const {t} = useTranslation();
    const [showInstall, showInstallSet] = useState(false); // 弹窗展示
    const [linkTime, lineTimeSet] = useState(5); // 倒计时获取能否安装状态,如果这个时间内一直没有,就不弹出

    useEffect(() => {
        try {
            if (window?.deferredPrompt) {
                if (sessionStorage.getItem('closeAppInstall') !== '1') showInstallSet(true);
            }
        } catch (error) {}
        timeOut = setTimeout(() => {
            lineTimeSet((e) => e - 1);
            clearTimeout(timeOut);
        }, 3000);
    }, [linkTime]);

    const installApp = () => {
        clearTimeout(timeOut);
        window.deferredPrompt?.prompt().then(() => {
            showInstallSet(false);
        });
        showInstallSet(false);
    };

    return showInstall ? (
        <div className='fixed top-4 right-4 w-75 bg-b2 z-[200] rounded-lg shadow-lg'>
            <div className='flex justify-between items-center p-3'>
                <span className='text-[16px] theme'>如何快速访问网站</span>{' '}
                <CloseOutline
                    className='cursor-pointer'
                    onClick={() => {
                        showInstallSet(false);
                        sessionStorage.setItem('closeAppInstall', '1');
                    }}
                />
            </div>
            <div className='pt-4 grid grid-cols-2 text-[12px]'>
                <div className='px-3 flex flex-col justify-between relative after:content-[""] after:bg-white/5 after:w-[1px] after:h-20 after:absolute after:right-0 after:top-1/2 after:-translate-y-1/2'>
                    <div className='leading-4'>1、在浏览器搜索栏点击该图标</div>
                    <div className='mt-2'>
                        <img src={require('@/branch/assets/images/download/guide1.png')} className='max-w-full' />
                    </div>
                </div>
                <div className='px-3 flex flex-col justify-between'>
                    <div className='leading-4'>2、在弹出框内点击安装</div>
                    <div className='mt-2'>
                        <img src={require('@/branch/assets/images/download/guide2.png')} className='max-w-full' />
                    </div>
                </div>
            </div>
            <div className='px-3 text-[12px]'>在桌面找到快捷方式即可直接打开网站</div>
            <Divider className='mt-2 mb-0 h-[1px bg-white/5' />
            <div className='flex justify-end items-center h-11'>
                <Button
                    className='bg-b1 text-w2 px-3 border-none rounded-full min-w-[70px] flex justify-center items-center !h-7 mr-3'
                    onClick={() => installApp()}
                >
                    {t('anzhuang')}
                </Button>
                <Button
                    className='border border-solid border-deep text-[#AFCAFA] px-3 rounded-full min-w-[70px] flex justify-center items-center !h-7 mr-3'
                    onClick={() => {
                        showInstallSet(false);
                        sessionStorage.setItem('closeAppInstall', '1');
                    }}
                >
                    {t('btn_cancel')}
                </Button>
            </div>
        </div>
    ) : (
        <></>
    );
};

export default observer(GuideDown);

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

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

相关文章

【B站 heima】小兔鲜Vue3 项目学习笔记Day04

文章目录 二级分类1.整体认识和路由配置2.面包屑导航功能实现3. 基础商品列表实现4. 定制路由滚动行为 详情页1.整体认识和路由配置2.基础数据渲染3.热榜区域实现4. 图片预览组件封装5.放大镜-滑块跟随移动左侧滑块跟随鼠标移动放大镜-大图效果 6. props适配7. SKU组件熟悉使用…

【Git】Git学习-12:关联本地仓库和远程仓库

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 在github上建立仓库 根据指引将本地仓库push到github上 git remote add origin gitgithub.com:JVZO/f…

【STL专题】深入探索C++之std::string:不止于字符串【万字详解】

欢迎来到CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;深入探索C之std::string&#xff1a;不止于字符串 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux &#x1f3…

一阶数字高通滤波器

本文的主要内容包含一阶高通滤波器公式的推导和数字算法的实现以及编程和仿真 1 计算公式推导 1.1.2 算法实现及仿真 利用python实现的代码如下&#xff1a; import numpy as np # from scipy.signal import butter, lfilter, freqz import matplotlib.pyplot as plt #2pifW…

网站工作原理

web发展史 1.0时代不可修改 2.0可修改&#xff0c;比如发微博 有以下问题&#xff1a; 课程2&#xff1a; 静态页面 html 动态页面 php 经过服务端的语言解释器&#xff0c;解析成html文件&#xff0c;剩下的就和静态流程一样 后面三个是web服务器&#xff0c;语言解释器&…

二、使用Django创建一个基础应用

职位管理系统 - 建模 职位名称类别工作地点职位职责职位要求发布人发布日期修改日期 安装django pip install django5.0查看django版本 python -m django --version创建项目 django-admin startproject recruitment启动服务 python manage.py runserver 0.0.0.0:8000创建…

web APIs总结(3)

1. 本地存储介绍&#xff08;重点&#xff09; 数据存储在用户浏览器中设置、读取方便、甚至页面刷新不丢失数据容量较大&#xff0c;sessionStorage和localStorage约 5M 左右 本地存储分类- localStorage 作用: 可以将数据永久存储在本地(用户的电脑), 除非手动删除&#x…

网络编程—— Http的Get请求

http: hyper text transport protocal:超文本传输协议。 http是一种基于客户端-服务器模式的协议(Client-Server)。它规定只能由客户端先发起请求给服务器&#xff0c; 服务器做出响应。 http数据传输以数据报文的形式进行&#xff0c; 客户端向服务器发起的请求叫做请求报文。…

burpsuite抓包响应报文乱码

1、响应报文中的中文信息乱码 2、解决办法 3、设置成功后重新发起请求

无线网络安全技术基础

无线网络安全技术基础 无线网络安全风险和隐患 随着无线网络技术广泛应用,其安全性越来越引起关注.无线网络的安全主要有访问控制和数据加密,访问控制保证机密数据只能由授权用户访问,而数据加密则要求发送的数据只能被授权用户所接受和使用。 无线网络在数据传输时以微波进…

七大医用耗材启动!如何用数屿医械查询医用耗材中标?

近日&#xff0c;国家医保局发布《关于加强区域协同做好2024年医药集中采购提质扩面的通知》&#xff0c;标志着我国医药集中采购进入新阶段&#xff0c;将实现更高效、更规范的采购模式。 医用耗材是指经药品监督管理部门批准使用的&#xff0c;在诊断、治疗、防护和康复等医疗…

AI代理的类型、优势及示例

AI 代理的类型、优势和示例 AI 代理是重塑商业动态的关键技术进步。了解这些代理的运作方式&#xff0c;发现它们的关键优势包括效率、可扩展性和成本效益。我们将探索代理的实例及它们在各领域的应用&#xff0c;为未来的人工智能趋势和对客户体验的影响铺平道路。 想象一支由…

基于粒子群算法优化的长短期记忆神经网络(PSO-LSTM)回归预测

粒子群算法优化的长短期记忆&#xff08;LSTM&#xff09;神经网络用于回归预测是一种结合了进化计算和深度学习的强大方法。 1. 背景介绍 LSTM神经网络 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;&#xff0c…

AS连接MUMU模拟器

1、下载安装并打开mumu模拟器 mumu模拟器要弄成开发者模式 点击几次这个版本号&#xff0c;会有提示的&#xff0c;变成开发者模式之后&#xff0c;再连接As 2、打开as 打开Terminal窗口 先要cd 进去自己安装的sdk的platform-tools目录下 cd D:\Android\SDK\platform-tools 尝…

拓展类型——枚举

枚举的作用 枚举通常用来约定某个变量的取值范围 使用字面量和联合类型也可以达到约束变量的作用&#xff0c;但是会有不方便的情况 使用字面量和联合类型约束变量的问题 逻辑含义和真实的值会产生混淆&#xff0c;如果修改了真实值&#xff0c;会造成大量代码需要修改 例&…

大猿人话费平台对接程序,仅支持Windows

1、基础参数 输入大猿人系统分配的相关信息&#xff0c;然后保存。 软件运行在左下角显示在平台的余额。 本软件仅会在本地保存您填写的数据。 且您填写的数据仅会在和您的服务器通讯&#xff0c;不会发往其他地方。 请妥善保存好您的数据。 使用本软件造成的一切和本软件…

618哪些好物值得入手?必备数码好物清单分享

618购物节又来了!一大波智能好物来袭!随着科技的日新月异&#xff0c;智能产品已成为我们生活中不可或缺的一部分&#xff0c;它们不仅炫酷&#xff0c;还能让你生活更便捷。想知道今年都有哪些黑科技新品吗?赶紧跟我们一起&#xff0c;我们将详细介绍这些热门好物。一堆超炫酷…

【学习笔记】后端(Ⅰ)—— NodeJS(Ⅰ)

NodeJS 1、概述 1.1、NodeJS是什么 1.2、NodeJS的主要作用 1.3、NodeJS的优点 1.4、NodeJS 与 浏览器 的 JavaScript 对比 1.4.1 ECMAScript 介绍 1.4.2 JavaScript 介绍 1.4.3 TypeScript 介绍2、基础篇 2.1、Buff…

【Python脚本随手笔记】-- 将 “庆余年2” 等信息写入 Txt 文件中

&#x1f48c; 所属专栏&#xff1a;【Python脚本随手笔记】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

Gerchberg-Saxton (GS) 和混合输入输出(Hybrid Input-Output, HIO)算法

文章目录 1. 简介2. 算法描述3. 混合输入输出&#xff08;Hybrid Input-Output, HIO&#xff09;算法3.1 HIO算法步骤3.2 HIO算法的优势3.3 算法描述 4. 算法实现与对比5. 总结参考文献 1. 简介 Gerchberg-Saxton (GS) 算法是一种常用于相位恢复和光学成像的迭代算法。该算法最…