push.js API完全手册:Permission类与Util工具详解
你是否还在为跨浏览器通知权限处理烦恼?是否需要可靠的工具方法处理对象合并与类型判断?本文将系统讲解push.js中Permission类与Util工具类的核心功能,带你掌握桌面通知权限管理与通用工具方法的实战应用。
Permission类:跨浏览器通知权限管理
核心权限状态常量
Permission类定义了三个静态常量表示通知权限状态:
GRANTED: 权限已授予(值为'granted')DEFAULT: 默认未授权状态(值为'default')DENIED: 权限已拒绝(值为'denied')
权限检查与获取
get()方法是Permission类的核心,它会根据不同浏览器环境返回当前权限状态:
// 示例:获取当前通知权限状态
const permission = new Permission(window);
console.log(permission.get()); // 返回 'granted' | 'default' | 'denied'
该方法在Permission.js中实现了对多种浏览器的适配:
- 标准浏览器:使用
Notification.permission - 旧版WebKit浏览器:通过
webkitNotifications.checkPermission()映射权限状态 - Firefox Mobile:直接返回
GRANTED - IE9+:通过
msIsSiteMode()判断固定站点状态
权限请求实现
Permission类提供两种权限请求方式:
- 回调函数式(已废弃,Permission.js#L41-L83):
permission.request(
() => console.log('权限已授予'),
() => console.log('权限已拒绝')
);
- Promise式(推荐,Permission.js#L89-L132):
permission._requestAsPromise()
.then(() => console.log('权限已授予'))
.catch(() => console.log('权限已拒绝'));
权限状态判断
has()方法提供简洁的权限判断:
if (permission.has()) {
console.log('已获得通知权限');
}
Util工具类:通用功能封装
类型判断方法
Util.js提供了一组静态类型判断工具:
// 判断是否为undefined
Util.isUndefined(variable);
// 判断是否为字符串
Util.isString(value);
// 判断是否为函数
Util.isFunction(callback);
// 判断是否为对象
Util.isObject(obj);
对象深度合并
objectMerge()方法实现了对象的深度合并功能:
const target = { a: 1, b: { c: 2 } };
const source = { b: { d: 3 }, e: 4 };
Util.objectMerge(target, source);
// 结果: { a: 1, b: { c: 2, d: 3 }, e: 4 }
该实现位于Util.js#L23-L35,采用递归方式合并嵌套对象,避免了浅拷贝带来的问题。
实际应用场景
典型权限流程
结合Permission和Util类实现完整的通知权限流程:
const permission = new Permission(window);
// 检查权限,无权限则请求
if (permission.get() === permission.DEFAULT) {
permission._requestAsPromise()
.then(() => showNotification())
.catch(() => showPermissionDeniedMessage());
} else if (permission.has()) {
showNotification();
}
function showNotification() {
// 调用通知显示逻辑
}
工具类组合使用
// 合并通知配置
const defaultConfig = { title: '通知', body: '默认内容' };
const userConfig = { body: '用户自定义内容', icon: 'logo.png' };
Util.objectMerge(defaultConfig, userConfig);
// 使用合并后的配置显示通知
模块结构与依赖
push.js的权限与工具模块位于项目的src/push/目录下,主要文件包括:
- Permission.js:权限管理核心实现
- Util.js:通用工具方法
- index.js:模块导出入口
这些模块通过ES6模块系统组织,与src/agents/目录下的各浏览器代理模块协同工作,为push.js提供跨平台的通知能力。
最佳实践与注意事项
- 权限请求时机:建议在用户主动操作后请求权限,提高授权率
- 浏览器兼容性:Permission类已处理大部分浏览器差异,但仍需注意:
- IE不支持标准通知API
- 移动设备可能有特殊行为
- 工具类使用:Util类设计为纯静态工具,无需实例化即可使用
- 代码维护:相关实现位于src/push/目录,修改时需注意保持跨浏览器兼容性
通过Permission类与Util工具类的配合使用,push.js为开发者提供了简洁而强大的通知权限管理方案,同时通用工具方法也为日常开发提供了便利。完整实现可参考src/push/目录下的源代码。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



