Chrome扩展程序后台页面中未显示Chrome通知

时间:2014-02-27 04:30:01

标签: google-chrome google-chrome-extension notifications

使用新的chrome.notifications API,我无法从我的扩展程序中收到通知。即使是最基本的通知也不会出现,但我没有错误,并且回调函数已正确执行。

的manifest.json

{
  "name": "notify",
  "version": "0.0.0",
  "manifest_version": 2,
  "permissions": [
    "notifications"
  ],
  "background": {
    "scripts": ["main.js"]
  }
}

main.js

window.addEventListener('load', function() {
  var opt = {
    type: 'list',
    title: 'Primary Title',
    message: 'Primary message to display',
    priority: 1,
    items: [{ title: 'Item1', message: 'This is item 1.'},
            { title: 'Item2', message: 'This is item 2.'},
            { title: 'Item3', message: 'This is item 3.'}]
  };
  chrome.notifications.create('notify1', opt, function() { console.log('created!'); });
});

当我检查背景页面时,我可以看到“已创建!”在控制台中,但我从未在桌面上收到通知。我尝试了一堆不同的优先级值无济于事。我做错了什么?

4 个答案:

答案 0 :(得分:14)

不幸的是,由于我还没有诊断出来的错误,chrome.notifications的详细错误消息已从控制台中删除;您的通知未显示的原因是它未提供必需的“iconUrl”参数。当我在已安装的扩展程序的后台页面中尝试以下操作时:

var opt = {
  iconUrl: "http://www.google.com/favicon.ico",
  type: 'list',
  title: 'Primary Title',
  message: 'Primary message to display',
  priority: 1,
  items: [{ title: 'Item1', message: 'This is item 1.'},
        { title: 'Item2', message: 'This is item 2.'},
          { title: 'Item3', message: 'This is item 3.'}]
};
chrome.notifications.create('notify1', opt, function() { console.log('created!'); });

通知已成功创建。检查chrome.runtime.lastError:

是值得的
var opt = {
    type: 'list',
    title: 'Primary Title',
    message: 'Primary message to display',
    priority: 1,
    items: [{ title: 'Item1', message: 'This is item 1.'},
            { title: 'Item2', message: 'This is item 2.'},
            { title: 'Item3', message: 'This is item 3.'}]
  };
  chrome.notifications.create('notify1', opt, function(id) { console.log("Last error:", chrome.runtime.lastError); });

它会告诉你实际上有必需的属性而且缺少一个属性。

答案 1 :(得分:4)

如果您使用的是Mac和Chrome 59+,则可能是因为Chrome禁用了MacOS本机通知。这是两种可能的解决方案:

解决方案1 ​​

打开Chrome>转到chrome://flags>搜索Enable native notifications>更改为Disabled>重新启动Chrome

解决方案2

转到“ MacOS系统偏好设置”>“通知”>如下图所示打开横幅/警报通知(可能以前是“关闭”)

Notifications Setting Screenshot


Reference 1

Reference 2

答案 2 :(得分:0)

就我而言,Chrome对于已传递的特定名称/ ID仅会显示一次通知。作为解决方法,我在名称后加上了当前的DateTime以使其唯一。

chrome.notifications.create(`my-notification-${Date.now()}`, {
    type: "basic",
    iconUrl: "icons/logo.png",
    title: "My Title",
    message: "My Message",
});

答案 3 :(得分:0)

使用: chrome.runtime.lastError - 将其添加到回调中(参见示例)

注意: 你必须有 iconUrl 图标 URL 路径(如果与您的清单相关)

 chrome.notifications.create(`my-notification-${Date.now()}`, {
                iconUrl: "assets/images/1.png",
                type: "basic",
                contextMessage: "contextMessage",
                message: "message",
                title: "title"
            }, function(context) {
               console.log("Last error:", chrome.runtime.lastError);
               alert(JSON.stringify( chrome.runtime.lastError));
     
            });