【问题标题】:How to setup a setting whereby a user can select which type of alert they wish to display in JavaScript如何设置一个设置,用户可以选择他们希望在 JavaScript 中显示的警报类型
【发布时间】:2013-03-05 09:03:57
【问题描述】:

我有一个显示各种警报的 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>

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

任何帮助将不胜感激

【问题讨论】:

  • setPrefs() 中有什么?如果您查看 about:config(仔细),您可以查看是否设置了该布尔首选项。如果不是,则需要检查 setPrefs 函数以了解原因
  • 我目前在 setPrefs() setPrefs: function(){ namespace_highlight.setbgColor();窗口.close(); },
  • 这是附加组件的另一部分。
  • 我需要在这个 setPrefs() 函数中添加什么?

标签: javascript firefox-addon xul


【解决方案1】:

您可以将用户想要的下拉选项存储在输入元素中,并在显示警报之前对其进行查询。这也可以保存在 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"); 
}

【讨论】:

  • 用户将如何选择他们希望使用的警报?我还需要将它附加到 XUL 中的首选项窗口吗?
  • 是否会在 prefWindow 中定义为 userchoiceofalert?
  • 如何在预置窗口中进行设置?
【解决方案2】:

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

然后使用 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);

【讨论】:

  • 此代码是否是 JavaScript 的一部分,If 语句位于或包含在 XUL Window Preference 窗口中? var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  • Right 已经实现了上述功能,但它似乎只默认为内置警报。它不会显示其他警报。
  • 我有复选框工作,但似乎没有保存用户选择的内容。我已经用新的细节编辑了上面的问题。对此的任何帮助都会很棒。
猜你喜欢
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多