chrome.notifications间歇性地定义

时间:2013-12-22 00:06:37

标签: javascript google-chrome google-chrome-extension

我正在制作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未定义的任何其他原因?我知道我可以简单地确保它被定义,但我想知道发生了什么。感谢。

1 个答案:

答案 0 :(得分:2)

我能想到的唯一原因是Linux不支持API。

根据 the docs

  

注意:此API目前可在ChromeOS,Windows和Mac上使用。

我没有尝试使用最新版本,但我知道Linux上有以前Chrome版本的问题(例如没有显示的按钮等)。

我不确定它目前是否会以不同的方式影响不同的发行版。在任何情况下,最好检查失败客户端的Chrome版本和操作系统。