当通知面板打开时关闭/清除Chrome扩展通知

4

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

我正在使用chrome.notifications.create(string id, object options, function callback)函数创建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;

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

但是,如果通知面板已经打开,则无法清除通知。这在99%的情况下不是一个主要问题。直到我在通知中实现了按钮代码。

使用chrome.notifications.onButtonClicked.addListener(function callback); 单击后,我调用清除通知面板代码,并报告它已被清除。

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

但是我正在看它。一旦通知面板关闭并再次打开,我可以确认它确实消失了。但是显然,因为我在通知上点击了一个按钮,面板是打开的,但是它没有像我希望的那样清除。
所有这些都在扩展后台运行,没有持久性:false属性(因此脚本始终加载,并且由于我可以看到输出,我知道函数被调用了)。
我有什么疏忽吗?我没有看到任何处理关闭通知面板的功能。因此,据我所知,我正在清除通知,但面板没有更新其显示。
我正在使用Chrome 37.0.2019.0 canary在Win8上。
如果有人能够建议我可能遗漏的内容,我将不胜感激。我的谷歌搜索显示人们在HTML通知方面存在问题。
2个回答

5

这是一个已知的 bug,或者说是一个旧的设计决策,进展很少。

给该问题点赞以提高其优先级。我也遇到了同样的问题。


谢谢,我不知道为什么我的谷歌搜索失败了。 - WORMSS

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()
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接