通知是可在Firefox WebExtensions代码中用于显示消息的小模式框,类似于“ alert()”。如何将它们包装在Promises中,以便它们有足够的时间出现在屏幕上,然后被自动解雇? (我要回答我自己的问题。)
答案 0 :(得分:0)
此代码定义了一个函数S(),该函数在屏幕上停留3秒钟的通知框中显示具有给定标题的字符串。该代码返回一个Promise,等待1/2秒,直到该框真正出现。
用法:S('要显示的字符串','通知框的标题')。然后(nextFunction);
// Wrap setTimeout in a Promise
function delay(msec,value)
{
return new Promise(function(OKFunction)
{
setTimeout(OKFunction,msec,value);
});
} // delay
// S: Promise to show string in notification box
// with delays before continuing and before clearing the box
function S(Msg,Title)
{
var p=browser.notifications.create({
"type": "basic",
"iconUrl": browser.extension.getURL("icons/link-48.png"), // change this as desired
"title": Title,
"message": Msg});
p.then(S1);
return delay(500); // Wait for notification to appear before continuing
} // S
function S1(ID)
{ delay(3000,ID).then(S2).catch(err); } // S1
function S2(ID)
{ browser.notifications.clear(ID).then(empty).catch(err); } // S2
function empty(valueIgnored)
{
console.log('doing nothing');
} // empty
function err(Msg)
{
console.log('*** '+Msg);
throw Error;
} // err