Страницы: 1
Отсутствует
Пример, в менеджер паролей добавляется кнопка "Изменить":
// Редактировать сохранённые логины и пароли, от 11.01.2014. ................................ (function() { // добавить новый пункт "Показать пароли" в меню "Инструменты" .... var menuitem = document.createElement("menuitem"); menuitem.setAttribute("label", "Показать пароли"); var devToolsSep = document.getElementById("devToolsSeparator"); devToolsSep.parentNode.insertBefore( menuitem, devToolsSep ); addDestructor(function() { devToolsSep.parentNode.removeChild( menuitem ) }); // по клику на пункте открыть менеджер паролей с паролями для текущего сайта если они есть .... addEventListener("click", function(e) { var loc = content.location; var host = !loc.protocol.indexOf("http") ? loc.host : ''; var loginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); var login = loginManager.findLogins({}, loc.protocol + "//" + host, "", ""); var host = login == '' ? '' : host; var win = Services.wm.getMostRecentWindow("Toolkit:PasswordManager"); if ( win ) win.setFilter(host), win.focus(); else openDialog("chrome://passwordmgr/content/passwordManager.xul", "Password", "centerscreen, resizable=1", { filterString: host } ); }, false, menuitem ); // наблюдатель следит за открытием всех окон .... function winObs(subject) { subject.addEventListener("load", function c(e) { this.removeEventListener( e.type, c ); var doc = subject.document; var win = subject.document.defaultView; // если открыт окошко редактирования пароля клик на чекбоксе показывает / скрывает пароль .... if ( subject.opener.name == 'Password') { addEventListener("click", function(e) { var pass = e.target.hasAttribute("checked") ? false : "password"; doc.getElementById('password1Textbox').setAttribute("type", pass ); }, false, doc.getElementById('checkbox') ); } // если менеджер паролей добавить кнопку "Изменить" и обработчики .... if ( subject.name == 'Password' && !doc.getElementById("changePassword") ) { // обработчик закрывает менеджер паролей по клику на странице .... gBrowser.addEventListener("click", function f() { this.removeEventListener("click", f ); try { win.close() } catch(e) {}; // закрыть окно }); var buttons = doc.getElementsByTagName("button"); var tree = doc.getElementById("signonsTree"); // кнопка "Отобразить пароли" работает без запроса .... addEventListener("click", function(e) { e.preventDefault(); doc.getElementById('passwordCol').hidden = !doc.getElementById('passwordCol').hidden; }, false, buttons[2] ); // добавить кнопку "Изменить" .... var changePassBut = document.createElement("button"); changePassBut.setAttribute("label", "Изменить"); changePassBut.setAttribute("id", "changePassword"); changePassBut.setAttribute("disabled", true ); buttons[0].parentNode.insertBefore( changePassBut, buttons[2] ); // наблюдатель делает кнопку активной при выделении логина addEventListener("select", function() { win.signonsTreeView.selection.count == 1 ? changePassBut.removeAttribute("disabled") : changePassBut.setAttribute("disabled", "true"); }, false, tree ); // клик на кнопке запускает редактирование .... changePassBut.setAttribute("oncommand", "this.change();"); changePassBut.change = function() { // поличить выделений хост, логин и пароль function getSelLogin(column) { return tree.view.getCellText( tree.currentIndex, tree.columns.getColumnAt(column) ) }; // получить новый логин и пароль var prompt = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService( Ci.nsIPromptService ); var username = {value: getSelLogin(1)}, password = {value: getSelLogin(2)}; if ( !prompt.promptUsernameAndPassword(null, "Изменить имя пользователя и пароль", getSelLogin(0), username, password, "Показывать пароль", {} )) return; // найти нужный логин, клонировать и переписать с измененными данными var login = win.passwordmanager.findLogins({}, hostname, "", "")[0]; var newLogin = login.clone(); newLogin.username = username.value; newLogin.password = password.value; win.passwordmanager.modifyLogin( login, newLogin ); } } }); } Services.ww.registerNotification(winObs); addDestructor(function() { Services.ww.unregisterNotification(winObs) }); })();
Добавлено 30-04-2018 16:51:51
Это код для Сustom Buttons, но может подойдёт.
Отредактировано bunda1 (30-04-2018 16:51:51)
Отсутствует
Страницы: 1