Chrome 扩展程序 - 通知上的按钮侦听器多次执行

razvan000

我正在编写一个向 API 发出请求的 chrome 扩展,我注意到在我使用 chrome 的通知 API 从后台脚本创建通知后,通知中按钮上的侦听器被多次执行。在第一次运行时只运行一次,然后增加。我认为听众只是在页面上加起来,但我找不到刷新背景页面的方法。

这是创建通知及其侦听器的函数。

var myNotificationID
const displayNotification=(userEmail, password, website,username) =>{
    chrome.notifications.create("", {
        type:    "basic",
        iconUrl: "./icon128.png",
        title:   "PERMISSION",
        requireInteraction: true,
        message: "question",
        buttons: [{
            title: "YES",
        }, {
            title: "NO",
        }]
    }, function(id) {
        myNotificationID = id;
    })

    chrome.notifications.onButtonClicked.addListener(function(notifId, btnIdx) {
        if (notifId === myNotificationID) {
            if (btnIdx === 0) {
                console.log('inserting')
                try{
                    fetch (`http://localhost:8080/users/${userEmail}/accounts`,{      
                    })
                }catch(err){ 
                }
            } else if (btnIdx === 1) {
                console.log('clearing')
                chrome.notifications.clear(myNotificationID)
            }
        }
    });
}

这就是调用函数的地方

chrome.runtime.onMessage.addListener((message, sender, response)=>{
    if(message.message === 'showNotification'){
        console.log('received insert')
        displayNotification(message.userEmail,message.password, message.currentSite,message.username)
        response({status:"received"})
    }
})

监听器中的 fetch 被执行多次,但来自 onMessage 监听器的日志只显示一次,所以监听器是这里的问题。我试过 chrome.notifications.onButtonClicked.removeListener(),但正如我提到的那样没有成功。有没有其他方法可以在使用后从后台脚本中清除听众?

野山羊

使用通知存储:

const notificationsByID = {};

chrome.notifications.onButtonClicked.addListener((notifId, btnIdx) => {
    // Avoid access to the notification if not registered by displayNotification
    if (!notificationsByID[ notifId ]) { return null; }
    if (btnIdx === 0) {
        console.log('inserting')
        try{
            fetch (`http://localhost:8080/users/${ notificationsByID[ notifId ].userEmail }/accounts`,{ /**/ });
        }catch(err){
            console.log(err);
        }
        delete notificationsByID[ notifId ]; // Cleanup
    } else if (btnIdx === 1) {
        console.log('clearing')
        chrome.notifications.clear(myNotificationID);
        delete notificationsByID[ notifId ]; // Cleanup
    }
});

chrome.notifications.onClosed.addListener((notifId) => {
    if (notificationsByID[ notifId ]) { delete notificationsByID[ notifId ]; }
});

const displayNotification=(userEmail, password, website,username) =>{
    chrome.notifications.create("", {
        type:    "basic",
        iconUrl: "./icon128.png",
        title:   "PERMISSION",
        requireInteraction: true,
        message: "question",
        buttons: [{ title: "YES", }, { title: "NO", }]
    }, function(id) {
        // Insertion
        notificationsByID[ id ] = { userEmail, password, website,username };
    })
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章