我的Chrome扩展程序使用通知。我打电话给他们:
function notifyMe(message) {
if (!Notification) {
alert('No desktop notifications possible!');
return;
}
if (Notification.permission !== "granted")
Notification.requestPermission();
else {
var notification = new Notification('Bot success!', {
icon: 'https://material-design.storage.googleapis.com/publish/material_v_9/0Bx4BSt6jniD7blViQzF0azNqZU0/style_icons_system_intro_principles_consistent.png',
body: message,
});
setTimeout(function() { notification.close() }, 5000);
notification.onclick = function () {
window.open("http://google.com");
};
}
}
notifyMe("I am a notification!");
当通知已经存在时,是否有办法更改消息,图标和标题?有没有办法从另一个函数关闭它而不是函数本身内的5000毫秒超时?
我尝试了一些关于通过定义 var notification 从外部关闭它的事情;在我的脚本开头允许从任何地方访问,但这并没有很好地工作。
这可能非常明显,但我仍然是JS的新手。对不起!
任何帮助表示赞赏!
答案 0 :(得分:2)
您正在使用(网络)Notification
API创建通知,而不是针对特定扩展程序chrome.notifications
API。考虑到这一点:
有没有办法从另一个函数关闭它而不是函数本身内的5000ms超时?
只要存储构造函数返回的notification
对象,就可以随时调用notification.close()
。
我尝试了一些关于通过定义var通知从外部关闭它的事情;在我的脚本开头允许从任何地方访问,但这并没有很好地工作。
这是一个有效的策略;但如果您在函数内再次编写var notification
,则不再访问全局notification
变量,而是创建一个具有相同名称的新本地变量。如果您有全局变量,请避免在其他地方添加var
。
如果您对深入了解范围如何在JS中运作感兴趣,可能想查看You Don't Know JS: Scope & Closures
当通知已经存在时,是否有办法更改消息,图标和标题?
您无法编辑Notifications API创建的现有通知 - 其所有属性在创建后都是只读的,并且不能证明是更新方法。
但是,如果您使用相同的replace a notification创建新的tag
attribute,则可以chrome.notifications
API:
new Notification('One', {
tag: "replaceMe"
});
new Notification('Two', {
tag: "replaceMe"
});
// Will result in only one notification, "Two", being shown
考虑将this answer用于您的目的。它提供了比Notifications
API更多的功能,例如按钮(至少在Chrome中 - 如果您想要与Firefox共享代码库,那么这不是一个优势),并且不需要运行时权限请求。
答案 1 :(得分:0)