1

我有一个显示各种警报的 Firefox 插件。有没有一种方法可以让用户选择他们希望使用的警报类型?目前我有两种类型的警报。标准 JavaScript 警报和 alertNotification。有没有一种方法可以让菜单项具有用户可以选择的两种不同的警报。不知道我会如何在 JavaScript 中编写代码。设置页面在 XUL 中。

当前两个警报的代码:包含两个警报的代码:

if(resultEmail) {
               prompts.alert(null, "Test", "Email Address Detected");


  //Other form of alert. 
          var alertsService = Components.classes["@mozilla.org/alerts-service;1"].
          getService(Components.interfaces.nsIAlertsService);
          alertsService.showAlertNotification("", 
                                "Test","Email Detected", 
                                false, "", null, ""); }

如何设置用户可以选择他们希望使用的警报并将其设置在 XUL 窗口中?不确定这是否可能。

目前已经在下面实现了这一点,但仍然无法让用户选择他们希望使用的警报。

当前代码选择哪个警报:

var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
                var customAlert = prefManager.getBoolPref("extensions.yourextension.customalert");

        if(resultEmail) {
        if(!!customAlert)
                            {

                            // Show your alert
                             prompts.alert(null, "Privacy Exposure Detected", "Email Address Detected \n\nThis data is a privacy risk and should be reviewed");

                        } else {

                            // Show built in alert system
                            var alertsService = Components.classes["@mozilla.org/alerts-service;1"].
                           getService(Components.interfaces.nsIAlertsService);
                            alertsService.showAlertNotification("chrome://spellchecker/content/images/stop.png", 
                                "Privacy Exposure Detected",vrs_getWin.document.getElementById(elementT).value+ "This data is a privacy risk", 
                                false, "", null, "");

                        }

XUL 窗口代码:

<vbox>
        <hbox>
            <label control="custom-alert" value="Custom Alerts"/>
            <checkbox id="custom-alert" preference="customalert"/>
        </hbox>




            <button id="checkerOkButton" label="&savebutton.label;" oncommand="namespace_highlight.setPrefs();"/>
            <button id="checkerCancelButton" label="&cancelbutton.label;" oncommand="window.close();"/>
        </hbox>

    </vbox>

问题是复选框似乎没有保存输入,它只是默认为标准警报。

任何帮助将不胜感激

4

2 回答 2

0

您可以将用户想要的下拉选项存储在输入元素中,并在显示警报之前对其进行查询。这也可以保存在 cookie 中,以备将来纪念跨页面支持

//OR get type from session variable or cookie or whatever
var type = 1;
type = document.getElementById("userchoiceofalert").value;

function showAlert(type, subject, message)
{
if (type===1) {
    prompts.alert(null, subject, message);
} else {

  //Other form of alert. 
          var alertsService = Components.classes["@mozilla.org/alerts-service;1"].
          getService(Components.interfaces.nsIAlertsService);
          alertsService.showAlertNotification("", 
                                subject,message, 
                                false, "", null, ""); 
    }
}

//in your function
if(resultEmail) {
showAlert(type,"Test", "Email Address Detected"); 
}
于 2013-03-05T09:13:52.073 回答
0

我假设您已经有一个 prefwindow 或某种方式来存储您的选项。因此,您可以使用以下内容为其创建首选项:

<label control="custom-alert" value="自定义警报"/>
<checkbox id="custom-alert" 偏好="customalert"/>

然后使用 prefManager 组件在您的 javascript 中获取选定的首选项:

var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

将为您提供 prefManager 服务,然后您可以从那里检查该值(在这种情况下,它是一个布尔首选项,因为我们使用了一个复选框:

var customAlert = prefManager.getBoolPref("extensions.yourextension.customalert");

然后,您将在哪里显示您将拥有的警报类型:

if(!!customAlert)
{

    // 显示你的警报
    prompts.alert(null, "Test", "Email Address Detected");

} 别的 {

    // 显示内置警报系统
    var alertsService = Components.classes["@mozilla.org/alerts-service;1"]....

}

只需确保在您的 prefs.js 文件中具有首选项设置,例如:

// 首选项的默认值
pref("extensions.yourextension.customalert", false);
于 2013-03-05T09:13:54.953 回答