vue实现浏览器桌面通知

2023-11-11

浏览器桌面通知:当浏览器最小化,或者切换到其他标签页不在当前系统页面,或在其他页面时依然可以显示通知

*使用前注意:生产环境地址必须为https协议,开发环境可以用localhost IP地址,且必须允许显示通知才能显示桌面通知
*存在兼容性问题,不同系统不同浏览器甚至不同版本浏览器效果略有不同

方案一: H5 JavaScript Web Notification API

Notification官网
目前Notification除了IE浏览器不支持外, 其他浏览器都已支持桌面通知,移动端浏览器基本都未支持

      // 判断是否支持显示
      showJudge (data) {
        if (!('Notification' in window)) {
          alert('抱歉,此浏览器不支持桌面通知!')
        }
// granted: 用户允许该网站发送通知 default: 默认值,用户还未选择 denied: 用户拒绝该网站发送通知
// Notification.permission === 'granted' 可用于检测用户通知权限
        Notification.requestPermission().then((result) => {
          if (result === 'denied') {
            console.log('用户拒绝')
            return
          } else if (result === 'default') {
            console.log('用户未授权')
            return
          }
          this.sendMesgToDesk(data)
        })
      },
      // 显示消息通知
      sendMesgToDesk (data) {
        let notification = null
        let title = data.data.auditTitle
        let str1 = data.data.applicant + ' ' + data.data.applyTime
        let options = {
          tag: data.data.wfFormId, // 多条消息时tag相同只显示一条通知,需要显示多条时tag一定要不同,(谷歌每次只能显示一条,火狐可以显示多条)
          body: str1, // 通知主体
          data: { // 可以放置任意数据,方便后续使用
            content: data.data,
            originUrl: `http://localhost:8889/#/home`
          },
          requireInteraction: true, // 不自动关闭通知 默认值为false,通知会在三四秒之后自动关闭,(谷歌有用,火狐依然会自动关闭)
          image: require('../../../assets/img/AAA.png'), // 通知上方可显示需要展示的大图
          icon: require('../../../assets/img/XXX.png') // 通知图标 默认是浏览器图标
        }
        notification = new Notification(title, options)
        // 事件处理
        notification.onclick = ({ currentTarget: { data } }) => {
          // notification.close() 单个通知关闭
          window.focus()
          // 默认进入系统之前打开的页面,也可以这里自定义进入的页面
          window.location.href = data.originUrl
        }
        notification.onshow = () => {
          console.log('通知显示了')
        }
        notification.onclose = () => {
          console.log('通知被关闭了')
        }
        notification.onerror= () => {
          console.log('遇到错误')
        }
      },

方案二: push.js 工具 (基于notification)

push官网

一、引入

1.script引入方式

<script src="https://cdnjs.cloudflare.com/ajax/libs/push.js/0.0.11/push.min.js"></script>

2.npm安装引入

npm install push.js --save

引入

import Push from 'push.js'
// 如果全局使用在main.js引入后,进行挂载:
Vue.prototype.Push = Push

二、主要代码

  // 手动获取用户桌面通知权限
  if (this.Push.Permission.GRANTED) { // 判断当前是否有权限,没有则手动获取
    this.Push.Permission.request()
  }
  // 监听浏览器 当前系统是否在当前页
  document.addEventListener('visibilitychange', () => {
    if (!document.hidden) {   // 处于当前页面
    // 关闭之前的消息通知,清空
      this.Push.clear()
      this.notificationArr = []
    }
  })
	// 发送 浏览器 桌面通知
      showDeskNotify (data) {
        if (!this.Push.Permission.has()) {
          alert('抱歉,此浏览器不支持桌面通知!')
          return
        }
        // 关闭之前的消息通知
        this.Push.clear()
        let title = '消息通知(' + (this.auditMessageArr.length + 1) + '条未读)'
        this.Push.create(title, {
          tag: data.data.wfFormId,
          body: '类型:' + data.data.auditTitle + '\n时间:' + data.data.applyTime,
          requireInteraction: true,
          icon: require('../../../assets/img/XX.png'),
          onClick: () => {
            window.focus()
            // this.close() // 单个关闭
            this.Push.clear() // 全部关闭
            // window.location.href = data.originUrl
          }
        })
      },

方案三: iNotify.js JS

JS 实现浏览器的 title 闪烁、滚动、声音提示、chrome、Firefox、Safari等系统通知

1.npm安装引入

npm install title-notify --save

2.主要代码

var iNotify = new iNotify().init()
//推荐下面写法
var iNotify = new iNotify({
    message: '有消息了。',//标题
    effect: 'flash', // flash | scroll 闪烁还是滚动
    openurl:"http://www.bing.com", // 点击弹窗打开连接地址
    onclick:function(){ //点击弹出的窗之行事件
       console.log("---")
    },
    //可选播放声音
    audio:{
        //可以使用数组传多种格式的声音文件
        file: ['msg.mp4','msg.mp3','msg.wav']
        //下面也是可以的哦
        //file: 'msg.mp4'
    },
    //标题闪烁,或者滚动速度
    interval: 1000,
    //可选,默认绿底白字的  Favicon
    updateFavicon:{
        // favicon 字体颜色
        textColor: "#fff",
        //背景颜色,设置背景颜色透明,将值设置为“transparent”
        backgroundColor: "#2F9A00"
    },
    //可选chrome浏览器通知,默认不填写就是下面的内容
    notification:{
        title:"通知!",//设置标题
        icon:"",//设置图标 icon 默认为 Favicon
        body:'您来了一条新消息'//设置消息内容
    }
})

3.其他

判断浏览器弹框通知是否被阻止。

  iNotify.isPermission()

播放声音

 iNotify.player() 
 // 自动播放
 iNotify.loopPlay()

停止播放

iNotify.stopPlay()

设置播放声音URL

 1 iNotify.setURL('msg.mp3')// 设置一个
 2 iNotify.setURL(['msg.mp3','msg.ogg','msg.mp4']) // 设置多个

添加计数器

iNotify.addTimer()

清除计数器

 iNotify.clearTimer()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue实现浏览器桌面通知 的相关文章

随机推荐

  • n行Python代码系列:两行代码将JSON文本转换成标准字典类型

    老猿Python博文目录 https blog csdn net LaoYuanPython article details 98245036 一 引言 最近看到好几篇类似 n行Python代码 的博文 看起来还挺不错 简洁 实用 传播了知
  • 大数据技术——VMbox的安装和网络配置

    大数据实训案例 实验报告 题目 大数据实验环境搭建 姓名 xxx 学号 xxxxxxx 实验日期 2023 x x 一 实验目的 1 掌握Linux操作系统的安装和使用方法 2 掌握hadoop的安装和使用方法 二 实验平台 操作系统 Ub
  • [USACO08FEB]修路Making the Grade

    题目链接 走这里 题目分析 考虑绝对值的几何意义 显然 b 里的数一定在 a 里出现过 离不离散化问题不大 用下标作第二位状态就行 设 dp i j 表示第 i 个数 高度为 a j 时的最优解 方程见代码 代码 include
  • Spring第38篇:定时器详解(@Scheduled & @EnableScheduling)

    Spring中 Scheduled EnableScheduling 这2个注解 可以用来快速开发定时器 使用特别的简单 如何使用 用法 1 需要定时执行的方法上加上 Scheduled注解 这个注解中可以指定定时执行的规则 稍后详细介绍
  • OSS实现文件上传

    本文主要讲解mall整合OSS实现文件上传的过程 采用的是服务端签名后前端直传的方式 文章目录 OSS OSS中的相关概念 OSS的相关设置 开通OSS服务 创建存储空间 跨域资源共享 CORS 的设置 服务端签名后前端直传的相关说明 流程
  • python3 GUI- 登陆界面

    python3 GUI 登陆界面 from tkinter import root Tk def Show root1 Tk if En get user and En1 get 123 Label root1 text 登陆成功 bg G
  • 全新防火墙6.0 DHCP线路上网配置

    一 组网需求 外网接口使用DHCP 内网为192 168 1 0 24网段 实现基本上网功能 二 网络拓扑 三 配置要点 1 配置接口 wan1口 务必勾选 从服务器重新得到网关 这样dhcp地址获取成功后设备会自动生成默认路由 无需手动配
  • 详细记录Pycharm配置已安装好的Conda虚拟环境

    当安装好conda环境之后 想要在Pycharm中使用 那么就要在Pycharm中导入 我这里使用的pycharm professional 2023 2这个版本 下面是详细步骤 1 打开File gt Settings 2 找到Proje
  • 从0开始搭建高仿华为云教育课堂官网(一)创建项目和搭建导航栏

    之前上过一些华为云的前端教育课程 最终考核是以vue为基础搭建一个华为云教育课堂的官网 网址如下 https classroom devcloud huaweicloud com home 下面记录一下搭建网站的全过程 使用vuecli 4
  • android 杀死三方app

    这是杀死后台应用 并且非保护程序 非系统程序 1 ActivityManager am ActivityManager context getSystemService Context ACTIVITY SERVICE Log i kill
  • JQuery 判断访问的浏览器是pc还是手机

    摘要 以下代码用于JQuery判断访问的浏览器的类型 判断访问类型是电脑还是手机 author 2017年9月27日 function var mobile flag isMobile true为PC端 false为手机端 if mobil
  • c语言求一个字符数的补码,C语言-数据类型(原码、反码、补码)

    1 原码 在数值前直接加一符号位的表示法 例如 符号位 数值位 7 原 0 0000111 B 7 原 1 0000111 B 注意 a 数0的原码有两种形式 0 原 00000000B 0 原 10000000B b 8位二进制原码的表示
  • 编译CGAL

    抛弃CMake 长期以来 我一直以为编译CGAL是一项十分艰巨的任务 直到有一天 我决定彻底抛弃繁复的CMake 转而使用简简单单的QMake 这才发现 编译CGAL是如此简单的一个事儿 注 本文所指的CGAL是指CGAL4 14及之后的版
  • Web服务器群集:Tomcat配置https证书

    目录 一 理论 1 SSL 2 HTTPS协议和HTTP协议的区别 3 https证书配置 4 tomcat强制使用https 二 实验 1 https证书配置过程 2 tomcat强制使用https 三 总结 一 理论 1 SSL 1 概
  • 应用RFID技术的智慧图书馆系统带来了哪些便利?

    RFID技术是一种非接触式的自动识别技术 它通过射频信号自动识别目标对象并获取相关数据 识别工作无须人工干预 可工作于各种恶劣环境 RFID技术可识别高速运动物体并可同时识别多个标签 操作快捷方便 RFID技术主要由三个部分组成 标签 由耦
  • 最流行的自动化测试工具,总有一款适合你(附部分教程)

    前言 在自动化测试领域 自动化工具的核心地位毋庸置疑 本文总结了最顶尖的自动化测试工具和框架 这些工具和框架可以帮助组织更好地定位自己 跟上软件测试的趋势 这份清单包含了开源和商业的自动化测试解决方案 1 Selenium Selenium
  • App Tamer for Mac(CPU智能控制管理) v2.8.1

    App Tamer 是一款针对 macOS 平台的软件 它可以帮助用户有效地管理和控制正在运行的应用程序 通过优化 CPU 使用率 减少电池消耗和降低系统负载 App Tamer 提供了更加流畅和高效的计算体验 App Tamer mac软
  • 程序员下班儿后如何提升自己?

    作为一个程序员 下班后提升自己是非常重要的 以下是GPT提供的一些建议 1 学习新技术 技术行业发展迅速 不断学习新技术是保持竞争力的关键 了解行业趋势 选择合适的新技术进行学习和实践 2 参与开源项目 积极参与开源项目可以提高自己的编码能
  • 【MATH6005-Introduction to Python and MATH6181-Python & Forecasting】

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 Mid module Assignment Assignment 1 TASK1 Function prototype Function Behavior atributes
  • vue实现浏览器桌面通知

    浏览器桌面通知 当浏览器最小化 或者切换到其他标签页不在当前系统页面 或在其他页面时依然可以显示通知 使用前注意 生产环境地址必须为https协议 开发环境可以用localhost IP地址 且必须允许显示通知才能显示桌面通知 存在兼容性问