【前端基础问题】浏览器调起桌面通知功能 Notification

news2024/11/18 7:45:19

浏览器调起桌面通知功能 Notification

  • 一、Notification
  • 二、注意事项
  • 三、使用步骤
    • 1、向用户发起权限请求
    • 2、调用 Notification API 进行推送消息
  • 四、完整代码
  • 五、效果

一、Notification

Notifications API 允许网页或应用程序在系统级别发送在页面外部显示的通知;这样即使应用程序空闲或在后台,Web 应用程序也会向用户发送信息。本文将介绍在您自己的应用程序中使用此 API 的基础知识。

参考链接:MDN

二、注意事项

此项功能仅在一些支持的浏览器的安全上下文(HTTPS)中可用。

三、使用步骤

1、向用户发起权限请求

权限操作有三种状态:granted、denied、default
在这里插入图片描述

if (Notification.permission === 'granted') {
	this.notify(title, options);//发起通知
} else if (Notification.permission === 'default') {
	//如果用户未被询问授权,先发起权限请求,同意后再发通知
	Notification.requestPermission(function (res) {
		if (res === 'granted') {
			this.notify(title, options);//发起通知
		}
	});
}

2、调用 Notification API 进行推送消息

function notify($title, $options) {
    var notification = new Notification($title, $options);
    notification.onshow = function (event) { console.log('show : ', event); }
    notification.onclose = function (event) { console.log('close : ', event); }
    notification.onclick = function (event) {
        notification.close();
    }
}

四、完整代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浏览器消息测试</title>
</head>

<body>
    <button onclick="chromeMessageBtn()">浏览器消息测试</button>

    <script>
        //浏览器消息推送
        function chromeMessageBtn() {
            this.createNotify('测试通知', { body: '您收到一条新信息!', sticky: 'true' })
        }
        function createNotify(title, options) {
            if (Notification.permission === 'granted') {
                this.notify(title, options);//发起通知
            } else if (Notification.permission === 'default') {
                //如果用户未被询问授权,先发起权限请求,同意后再发通知
                Notification.requestPermission(function (res) {
                    if (res === 'granted') {
                        this.notify(title, options);//发起通知
                    }
                });
            }
        }
        function notify($title, $options) {
            var notification = new Notification($title, $options);
            notification.onshow = function (event) { console.log('show : ', event); }
            notification.onclose = function (event) { console.log('close : ', event); }
            notification.onclick = function (event) {
                notification.close();
            }
        }

    </script>
</body>

</html>

五、效果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【Servlet+Jsp+Mybatis+Maven】WEB图书馆管理系统

web图书馆管理系统一、绪论二、流程和其页面展示效果流程页面效果项目结构三、具体实现第一步&#xff1a;备数据库表第二步&#xff1a;编写登录前端代码第三步&#xff1a;利用过滤器处理安全问题第四步&#xff1a;控制层去实现相关调用第五步&#xff1a;实现持久化层与数据…

教你如何搭建人事OA-薪资管理系统,demo可分享

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建人事OA-薪资管理。1.2、应用场景根据设置薪资基础及考勤和绩效的数据计算得到各个员工工资详情。2、设置方法2.1、表单搭建1&#xff09;新建表单【工资表】&#xff0c;字段设置如下&#xff1b;名称类型名称类型人员资料分…

一款私有化部署的企业级在线文档和知识库

项目介绍基础说明&#xff1a;无忧企业文档是JVS体系下的一款企业协同在线文档&#xff0c;主要服务客群为企业用户&#xff0c;解决企业内部文档编辑、知识沉淀、知识协同等痛点。项目主要采用Java开发&#xff0c;基础框架采用JVS&#xff08;spring cloudVue&#xff09;适用…

基于微信小程序的一款小程序版知乎

从零开始开发的一款小程序&#xff0c;所以没有使用任何框架及UI库&#xff0c;记录一下本次开发中踩过的坑吧~展示效果(界面样式设计与交互来自iOS 4.8.0版本知乎App)&#xff1a;项目地址&#xff1a;https://download.csdn.net一、开始前的准备申请账号&#xff1a;根据小程…

钉钉配置事件订阅(Python)

钉钉配置事件订阅 0.需求分析 需要实现钉钉企业通讯录同步至企业微信通讯录&#xff0c;这就需要用到钉钉的事件与回调 1.配置应用 登陆开放平台 https://open-dev.dingtalk.com/去企业内部开发里面&#xff0c;先创建个应用&#xff0c;后面都借用这个应用来调接口 创建完…

自定义分库分表组件(实现分库分表的组件)——java

系列文章目录 文章目录系列文章目录前言一、所需技术二、技术总结1. ThreadLocal2.HashMap三、实现1、定义路由注解自定义注解格式要求元注解&#xff1a; 用于描述注解的注解在程序使用(解析)注解&#xff1a;获取注解中定义的属性值小例子&#xff1a;注解定义一个简单的测试…

AI算法创新赛-人车目标检测竞赛总结03

团队简介AI0000032 团队成员均为从事计算机视觉领域的企业员工&#xff0c;热爱技术&#xff0c;勇于挑战&#xff0c;致力于更通用目标检测算法的研究与落地。团队由三人组成&#xff0c;队长何正海 主要负责整体方案设计与模型的量化工作&#xff0c;余洋主要负责模型训练与调…

YOLOV5输出的txt里面有什么猫腻(用于图像分类竞赛中提升图像信息密度)

背景概括&#xff1a; kaggle最近举办了一场医学乳腺癌检测的比赛&#xff08;图像分类&#xff09; 比赛官网地址 给的数据是dcm的专业的医学格式&#xff0c;自己通过DICOM库转为png后&#xff0c;发现该图像胸部不同的患者乳腺大小不一&#xff0c;简言之乳腺的CT有效图在…

MySQL性能调优与设计——MySQL中的索引

MySQL中的索引 InnoDB存储引擎支持以下几种常见索引&#xff1a;B树索引、全文索引、哈希索引&#xff0c;其中比较关键的是B树索引。 B树索引 InnoDB中的索引自然也是按照B树来组织的&#xff0c;B树的叶子节点用来存放数据。 聚集索引/聚簇索引 InnoDB中使用了聚集索引&…

LeetCode 141. 环形链表

原题链接 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给你一个链表的头节点 headheadhead &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 nextnextnext 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的…

python编写webapi读取mdb数据使用json格式响应客户端请求

想做个自动应答机器人&#xff0c;通过webapi提供服务&#xff0c;原理&#xff1a;判断关键字&#xff0c;到数据库查询相关内容&#xff0c;以json格式反馈给客户端。 1、创建autoreply数据库&#xff0c;创建reply表&#xff0c;表中包含kename&#xff08;短文本&#xff…

积水在线监测仪——积水点、易涝点水位监测设备

一、设备概述 积水在线监测仪是一款用于城市积水点、易涝点等场景的水位监测设备&#xff0c;设备采用电池供电&#xff0c;无需另外供电&#xff0c;安装方便&#xff0c;使用简单。可以时监测水点、易涝点水位情况&#xff0c;当水位数据超过阈值后触发告警上传&#xff0c;…

MybatisPlus实现分页效果并解决错误:cant found IPage for args!

前言 早就知道MybatisPlus对分页进行了处理&#xff0c;但是一直没有实战用过&#xff0c;用的是自己封装的一个分页组件&#xff0c;虽不说麻烦吧&#xff0c;但是也不是特别简单。 写起来还是比较复杂&#xff0c;但是最近这个组件有了点小小的bug&#xff0c;我决定是时候…

2023年进入互联网行业好找工作吗?

俗话说&#xff1a;选择大于努力。年后求职小高峰&#xff0c;大家在找工作的时候选择肯定也多了。 说真&#xff0c;不是人人都有铁饭&#xff0c;普通家庭的孩子想要在2023年进入互联网行业去找工作可能吗&#xff1f; 01 有一点大家要清楚&#xff0c;2022年是进入过一个寒…

【Linux】变量定义规则、shell 格式、空格注意事项汇总

文章目录1. 空格问题号用于赋值用于比较2. 变量2.1 变量命名的格式要求2.2、shell变量中的注意事项2.3、变量的使用方法2.4、变量的类型&#xff08;1&#xff09;自定义变量&#xff08;2&#xff09;环境变量&#xff08;3&#xff09;位置变量&#xff08;4&#xff09;预定…

【高并发-用户中心】读多写少的系统如何优化

本博客纯属个人总结&#xff0c;非原创。喜欢技术交流的&#xff0c;可关注博主&#xff0c;武汉有后端开发群&#xff0c;可支持内推&#xff0c;了解武汉行情等。 如何对读多写少的系统进行高并发优化&#xff1f; 比如&#xff1a;用户中心是一个读多写少的系统&#xff0…

Linux定时备份MySql数据库

一、创建文件 cd / mkdir mysqlbackup vi mysqlbackup.sh然后将下面的代码更改后复制上去即可。 #!/bin/bash mysqldump -uroot -ppassword database > /mysqlbackup/database__$(date %Y%m%d_%H%M%S).sqlpassword指的是MySql的密码&#xff0c;database指的是所要备份的…

【C++算法】dfs深度优先搜索(上) ——【全面深度剖析+经典例题展示】

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 &#x1f4d5; ps:七八天没更新了欸&#xff0c;这几天刚搞完元宇宙&#xff0c;上午一直练&#x1f697;&#xff0c;下午背四级单词和刷题来着&#xff0c;还在忙一些学弟…

leaflet: 禁止拖拽、禁止zoom(双击、滚轮、键盘)、禁止tap(076)

第076个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中设定各种禁止状态,这里设置了禁止拖拽、禁止zoom(双击、滚轮、键盘)、禁止tap。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共73行)相关A…

linux高级命令之多进程的使用

多进程的使用学习目标能够使用多进程完成多任务1 导入进程包#导入进程包import multiprocessing2. Process进程类的说明Process([group [, target [, name [, args [, kwargs]]]]])group&#xff1a;指定进程组&#xff0c;目前只能使用Nonetarget&#xff1a;执行的目标任务名…