函数观察首选项的更改会针对每个更改触发 3 次

Function observing changes to preferences triggers 3 times for each change

本文关键字:首选项 观察 函数      更新时间:2023-09-26

我正在尝试在Firefox扩展中使用首选项。我能够创建和读取这些,但是当我尝试在更改它们时运行函数时,我遇到了问题。我正在使用 MDN 建议的框架(经过修改,因此它可以做我想要的)。这是这里的确切代码:

observe: function(aSubject, aTopic, aData) {
if (aTopic != "nsPref:changed")
{
return;
}
switch (aData) {
    case "username":
        var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
        var username = prefManager.getCharPref("extensions.alexandriauplink.username");
        // extensions.myextension.pref1 was changed
        break;
    case "password":
        var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
        var password = prefManager.getCharPref("extensions.alexandriauplink.password");
        alert(password);
        break;
}
var password = prefManager.getCharPref("extensions.alexandriauplink.password");
var username = prefManager.getCharPref("extensions.alexandriauplink.username");
alert( "username:" + username +"|" + "password:" + password);
}

问题是,当我在选项对话框中更改首选项时,对于更改的每个首选项,此功能都会触发 3 次。如果您能够提供帮助,请提前感谢您。

正如一位评论者指出的那样,这是由于Firefox的多个窗口被打开引起的 - 每个窗口都在触发事件。