在通知面板打开时关闭/清除chrome扩展通知

时间:2014-05-29 10:49:51

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

参考文献:https://developer.chrome.com/apps/notifications

我正在使用chrome.notifications.create(字符串id,对象选项,函数回调);创建Chrome通知。

var id = 'list';

var options = {};
options.title = 'test';
options.iconUrl = 'notification_icon.png';
options.type = 'list';
options.message = "test";
options.buttons = [{title: 'test'}];
options.items = [{title: 'test', message:'test'}];

var createCallback = function(notificationId) { console.log(notificationId); };

chrome.notifications.create(id, options, createCallback); // returns 'list';

这会按预期创建通知。一切正常。

然后我调用chrome.notification.clear(string id,function callback);

var id = 'list';

var clearCallback= function(wasCleared) { console.log(wasCleared); };

chrome.notification.clear(id, clearCallback); // returns true;

这确实清除了通知。一切正常。

EXCEPT 如果通知面板已打开,则不会清除通知。这在99%的时间里都不是主要问题。直到我在通知中实现了按钮代码。

使用chrome.notifications.onButtonClicked.addListener(函数回调);点击后,我正在调用清除通知面板代码,并在清除时报告。

var onButtonClickedCallback = function (notificationId, buttonIndex) {
    console.log(notificationId, buttonIndex);
    if ( notificationId == 'list' ) {
        chrome.notification.clear(id, clearCallback); // returns true;
    }
}
chrome.notifications.onButtonClicked.addListener(onButtonClickedCallback); // onClick it returns 'list', 0

但是我正在考虑它......一旦通知面板关闭并再次打开,我可以确认它实际上已经消失了。但很明显,因为我点击通知上的按钮,面板是打开的,但它并没有像我希望的那样清除。

所有这些都在没有persistence:false属性的扩展后台运行(所以脚本总是加载,因为我可以看到输出,我知道正在调用函数)。

我忽略了什么吗?我没有看到任何与关闭通知面板有关的功能。所以据我所知,我正在清除通知,但面板没有更新它的显示。

我在Win8上使用Chrome 37.0.2019.0 canary

如果有人可以提出我可能错过的内容,我会很高兴。我的谷歌搜索显示人们对HTML通知有疑问。

2 个答案:

答案 0 :(得分:5)

这是一个known bug,或者更确切地说是一个旧的设计决定,进展甚微。

明确问题以提高其优先级。我也遭受同样的痛苦。

答案 1 :(得分:2)

以下是我几个月来一直使用的解决方案:

// open a window to take focus away from notification and there it will close automatically
function openTemporaryWindowToRemoveFocus() {
   var win = window.open("about:blank", "emptyWindow", "width=1, height=1, top=-500, left=-500");
   win.close();
}

chrome.notifications.clear("", function(wasCleared) {
    openTemporaryWindowToRemoveFocus()
});