Mac端新版Chrome扩展Notifications API不生效问题咨询
问题根因
Mac端Chrome 95及以上版本对Manifest V3扩展的通知接口做了3项Windows端未同步的策略收紧,你的代码刚好命中全部限制:
- 远程图标资源拦截:Mac端Chrome不允许扩展通知加载跨域远程图标,你代码里使用的远程图标链接直接导致通知创建请求被内核拦截,Windows端暂时保留了旧兼容逻辑所以可正常运行。
- 消息通道阻塞:你在
chrome.runtime.onMessage监听逻辑中返回了true(声明需要异步调用回调),但全程没有调用传入的callback方法释放消息通道,Mac端Chrome会判定该次请求处于未完成状态,阻塞后续通知创建的事件回调执行。 - 高优先级通知静默策略:你设置了
priority: 2,Mac系统通知中心对非用户主动交互触发的高优先级扩展通知默认会直接收起到通知列表,不会弹出横幅提示,仅Windows端允许高优先级后台通知直接弹出。
修复方案
按以下步骤修改代码即可正常触发通知:
- 将通知使用的图标下载到扩展根目录,命名为
notify_icon.png,把chrome.notifications.create中的iconUrl修改为相对路径"notify_icon.png" - 两种方式处理消息通道问题:
- 不需要给content script返回结果时,直接删除
return true;语句 - 需要保留异步逻辑的话,在通知创建完成的回调(或者逻辑末尾)添加
callback();调用释放通道
- 不需要给content script返回结果时,直接删除
- 将通知配置中的
priority改为0或1,适配Mac系统的通知展示策略
// 修改后的bg_page.js核心逻辑示例 chrome.runtime.onMessage.addListener(function(request, sender, callback) { var name = 'test' + (Math.floor(Math.random() * 10000)).toString() + 'v5'; chrome.notifications.create(name, { type: 'basic', iconUrl: 'notify_icon.png', // 替换为本地图标路径 title: 'Test', message: 'Current Name: ' + name, priority: 0, // 调整优先级 }, () => { callback(); // 调用回调释放通道 } ); console.log('test', name); // 不需要返回结果也可以直接删掉return true,就不用加上面的callback调用 });
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

