我正在制作Google Chrome扩展程序。该程序的一部分通过chrome.notifications API显示通知。我开始用这个逻辑显示通知:
// Expects options: { iconUrl: string, title: string, message: string }
showNotification: function (options) {
// TODO: Future version of Google Chrome will support permission levels on notifications.
if (chrome.notifications.getPermissionLevel) {
chrome.notifications.getPermissionLevel(function (permissionLevel) {
if (permissionLevel === 'granted') {
doShowNotification(options);
}
});
} else {
doShowNotification(options);
}
}
这个逻辑很好用。 getPermissionLevel函数尚未实现,但将来会实现。因此,我检查是否已实施,如果没有,只需显示通知。
我看到一些客户端出现错误。错误消息指出chrome.notifications未在以下行中定义:
if (chrome.notifications.getPermissionLevel) {
错误消息:
未捕获的TypeError:无法读取属性'getPermissionLevel' 未定义
这很奇怪,因为这段代码对我来说非常好,我的测试用例通过等等。另外,我的manifest.json中有以下规则:
"minimum_chrome_version": "29.0.1547.76"
这会强制所有客户使用支持通知的Google Chrome版本。根据文档http://developer.chrome.com/extensions/notifications.html,Chrome 28中的通知变得稳定:
可用性:自Chrome 28以来稳定。
此外,我还声明了以下权限:
"permissions": [
"contextMenus",
"management",
"notifications",
"storage",
"identity",
"webRequest",
"webRequestBlocking"
]
我正在请求通知权限,并确保用户使用当前的浏览器版本。
有没有人知道chrome.notifications未定义的任何其他原因?我知道我可以简单地确保它被定义,但我想知道发生了什么。感谢。
答案 0 :(得分:2)
我能想到的唯一原因是Linux不支持API。
根据 the docs :
注意:此API目前可在ChromeOS,Windows和Mac上使用。
我没有尝试使用最新版本,但我知道Linux上有以前Chrome版本的问题(例如没有显示的按钮等)。
我不确定它目前是否会以不同的方式影响不同的发行版。在任何情况下,最好检查失败客户端的Chrome版本和操作系统。