Javascript Firefox插件SDK:带有多个复选框的提示

Javascript Firefox插件SDK:带有多个复选框的提示,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我正在为客户端开发Firefox插件 当用户卸载加载项时,我需要向用户显示一个提示,其中包含三个复选框。这些复选框将作为用户恢复其以前浏览器设置的选项 我已使用界面的方法成功地在上创建了一个提示: let value = {value: true}; let confirm = promptService.confirmCheck( null, "Uninstall My Extension", "You are uninstalling My Extension. Y

我正在为客户端开发Firefox插件

当用户卸载加载项时,我需要向用户显示一个提示,其中包含三个复选框。这些复选框将作为用户恢复其以前浏览器设置的选项

我已使用界面的方法成功地在上创建了一个提示:

let value = {value: true};

let confirm = promptService.confirmCheck(
    null,
    "Uninstall My Extension",
    "You are uninstalling My Extension. You can chose these options to restore your settings to previous state.",
    "Remove My Extension as the default search engine, homepage, new tab landing page, and restore to my previous settings",
    value
);
唯一的问题是,它只包含一个复选框,我需要3个不同的复选框,分别是“搜索引擎”、“主页”和“新标签Url”

我通过附加SDK使用chrome代码,但不熟悉XUL


我该怎么做?我真的需要学习XUL来创建一个简单的提示吗?

好的,回答我自己的问题,正如我想的那样。我发现(相对而言)最简单的方法是使用XUL:

这是我的提示。xul:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
<dialog id="myDialog"
        title="My Extension"
        xmlns:html="http://www.w3.org/1999/xhtml"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        onload="init();"
        buttons="accept"
        buttonlabelaccept="OK"
        ondialogaccept="return doContinue();">

    <script type="application/x-javascript">
        function init() {

        }

        function doContinue() {
            window.arguments[0].CHECK_1 = document.querySelector('#check_1').checked;
            window.arguments[0].CHECK_2 = document.querySelector('#check_2').checked;
            window.arguments[0].CHECK_3 = document.querySelector('#check_3').checked;
            return true;
        }
    </script>

    <html:div style="width: 410px;">
        <html:div>
            <html:p>You have selected to uninstall My Extension</html:p>
        </html:div>
        <html:blockquote id="checkboxes_container">
            <html:div id="remove_search_container">
                <html:input type="checkbox" id="check_1" value="true" checked="true"/>
                <html:label for="check_1">Label 1</html:label>
            </html:div>
            <html:div id="remove_homepage_container">
                <html:input type="checkbox" id="check_2" value="true" checked="true"/>
                <html:label for="check_2">Label 2</html:label>
            </html:div>
            <html:div id="remove_newtab_container">
                <html:input type="checkbox" id="check_3" value="true" checked="true"/>
                <html:label for="check_3">Label 3</html:label>
            </html:div>
        </html:blockquote>
    </html:div>
</dialog>
我正在使用chrome代码加载提示符,在
main.js

let Window = Cc["@mozilla.org/embedcomp/window-watcher;1"]
            .getService(Ci.nsIWindowWatcher);

let arg = {

    CHECK_1: false,

    CHECK_2: false,

    CHECK_3: false

};

let window = Window.activeWindow.openDialog("chrome://YOUR_PACKAGE_NAME/content/PATH_TO_dialog.xul", "myWindow", "chrome,modal,centerscreen", arg);
用户关闭提示后,
arg
对象将包含提示的复选框值。例如,如果用户勾选所有复选框,则
arg
对象将是:

{

    CHECK_1 : true,

    CHECK_2 : true,

    CHECK_3 : true

}

我就是这么做的。祝你今天愉快

您可以使用三种不同的按钮:。但对于三个复选框,您必须使用XUL或HTML进行自己的提示。@Noitidart不同的按钮对我来说不是一个选项。有HTML提示的教程吗?我不知道HTML可以代替XUL用于提示。你绝对可以。使用
Services.ww.openWindow
打开一个新窗口,使其成为模态并加载HTML页面。或者用一个xul元素(如stack、deck或其他重叠元素)覆盖当前窗口,附加一个iframe并在那里加载一个html页面。从该repo安装此加载项:安装后使用,重新启动浏览器,按菜单栏的alt键,查看“AdHelp”菜单项,从中选择“Picture”项,它覆盖当前选项卡。该简单的演示加载项会对每个选项卡进行提示,如果愿意,您可以使其与浏览器窗口重叠,使其成为模态。@Noitidart当我使用
nsIWindowWatcher
openWindow
)打开新窗口并将html页面加载到其中时,它会成功打开。但是,当插件打开时,它已经被禁用。当提示符打开时,有没有办法阻止执行?另外,在用户关闭提示后,我如何知道勾选了哪些复选框?太棒了!谢谢分享!!:)
{

    CHECK_1 : true,

    CHECK_2 : true,

    CHECK_3 : true

}