Редактировать сохранённые логины и пароли ( Firefox 17+ )
Автор: bunda1
Версия: от 11.01.2014.
Описание: после установки кода в менеджер паролей добавляется кнопка "Изменить" которая даёт возможность редактировать сохранённые логины и пароли, стандартная кнопка "Отобразить пароли" работает без запроса, менеджер паролей можно закрыть кликом на странице. Код также добавляет новый пункт меню "Показать пароли" в меню "Инструменты" на панели меню который открывает менеджер паролей с паролями для текущего сайта если они есть или со всеми паролям если у сайта нет сохранённых паролей.
// Редактировать сохранённые логины и пароли, от 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) }); })();
Отредактировано bunda1 (12-01-2014 01:13:21)
Отсутствует
voqabuhe пишетbunda1
А чтобы пароль отображался, можно сделать? А так прикольно, спасибо.Наверно можно но я не знаю как. Буду думать.
Я, конечно, в этом мало что смыслю (как и во многом остальном ), но есть такой аддон Show My Password 2.0
И я буду очень рад, если это Вам поможет добавить то, что Вы посчитаете нужным.
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Я, конечно, в этом мало что смыслю (как и во многом остальном ), но есть такой аддон Show My Password 2.0
И я буду очень рад, если это Вам поможет добавить то, что Вы посчитаете нужным.
Это совсем не то, кнопку попробуйте и сами всё поймёте.
Отредактировано voqabuhe (16-12-2013 01:04:13)
Отсутствует
bunda1
Кнопка супер! Еще бы интегрировать в неё такую функцию - http://forum.mozilla-russia.org/viewtopic.php?pid=616520#p616520
Это можно. Нужно что бы пункт меню открывал редактор паролем сайта, чтобы не искать, так что ли?
Добавлено 16-12-2013 02:19:42
dennius
Попробуй через пункт "Показать пароли сайта" в меню "Инструменты":
// Редактировать сохранённые логини и пароли, от 16.12.2013. ................................ (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 str = !loc.protocol.indexOf("http") ? loc.host : ''; var win = Services.wm.getMostRecentWindow("Toolkit:PasswordManager"); if ( win ) win.setFilter(str), win.focus(); else openDialog("chrome://passwordmgr/content/passwordManager.xul", "Password", "centerscreen, resizable=1", { filterString: str } ); }, false, menuitem ); // наблюдатель следит за открытием всех окон .... var observer = { observe: function(subject, topic, data) { subject.addEventListener("load", this, false); }, handleEvent: function(e) { var doc = e.target; var win = doc.defaultView; var href = doc.location.href.slice(0,60); win.removeEventListener("load", this, false); // если менеджер паролей добавить кнопку "Изменить" и обработчики .... if ( href == "chrome://passwordmgr/content/passwordManager.xul") { // обработчик закрывает менеджер паролей по клику на странице .... gBrowser.addEventListener("click", function f() { this.removeEventListener("click", f ); try { win.close() } catch(e) {}; // закрыть окно }); var buttons = doc.getElementsByTagName("button"); // кнопка "Отобразить пароли" работает без запроса .... addEventListener("click", function(e) { e.preventDefault(); doc.getElementById('passwordCol').hidden = false; }, 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] ); // наблюдатель делает кнопку активной при выделении логина var setHiddenMenu = new MutationObserver(function() { changePassBut.setAttribute("disabled", buttons[0].disabled ); }); setHiddenMenu.observe( buttons[0], { attributes: true, attributeFilter: ["disabled"] } ); // клик на кнопке запускает редактирование addEventListener("click", function() { // поличить выделений хост, логин и пароль var tree = doc.getElementById('signonsTree'); function getSelectedItemFromTree(column) { return tree.view.getCellText( tree.currentIndex, tree.columns.getColumnAt(column) ) }; var hostname = getSelectedItemFromTree(0); var currUsername = getSelectedItemFromTree(1); var currPassword = getSelectedItemFromTree(2); // получить новый логин и пароль var prompt = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService( Ci.nsIPromptService ); var username = {value: currUsername}; var password = {value: currPassword}; var result = prompt.promptUsernameAndPassword( null, "Изменить имя пользователя и пароль", hostname, username, password, "", {value:false} ); if ( !result ) return; // найти нужный логин и переписать с измененными данными var myLoginManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); var logins = myLoginManager.findLogins({}, hostname, "", ""); logins.forEach(function( login ) { if ( login.password !== currPassword ) return; var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Ci.nsILoginInfo, "init"); var newLogin = new nsLoginInfo( hostname, login.formSubmitURL, !login.aHttpRealm ? null : login.aHttpRealm, username.value, password.value, login.usernameField, login.passwordField); myLoginManager.modifyLogin( login, newLogin ); }); }, false, changePassBut ); } } }; Services.obs.addObserver( observer, "domwindowopened", false); addDestructor(function() { Services.obs.removeObserver(observer, "domwindowopened", false) }); })();
Отредактировано bunda1 (16-12-2013 02:19:42)
Отсутствует
Кнопка супер! Еще бы интегрировать в неё такую функцию - http://forum.mozilla-russia.org/viewtopic.php?pid=616520#p616520
Ну и добавь в ту кнопку, я именно так и сделал.
Отсутствует
Попробуй через пункт "Показать пароли сайта" в меню "Инструменты":
На английской версии это нелегко сделать. Долго искал, но так и не нашёл как это сделать, даже на русской версии
Кстати, только в конце заметил, как мило смотрится пункт кнопки "Изменить" среди "Remove all" и "Show passwords", так и оставлю)
Всё-таки остановлюсь на версии кнопки из моей ссылки с добавлением вашего кода. Ведь та кнопка не только позволяет не искать пароль среди других, она еще и моментально выводит его прямо с панелей браузера, без лишних движений ака поиски во всяких меню.
И да, спасибо огромное за ваши кнопки! Без них на голом файрфоксе уже неуютно
Ну и добавь в ту кнопку, я именно так и сделал.
ну если бы я думал только о себе, то не писал бы сюда вообще, т.к. сделал то же самое в первую очередь
просто показалось, что многим может пригодиться. имхо очистить поле поиска по логинам/паролям проще, чем вбивать нужные
Отсутствует
bunda1
После рестарта пропадает пункт меню "Показать пароли" в меню "Инструменты", если открыть редактор кнопки и нажать ОК то он появляется вновь до следующего рестарта.
После ПКМ - настроить, "Показать пароли" и кнопка "Изменить" дублируются.
Добавлено 16-12-2013 11:52:55
ну если бы я думал только о себе, то не писал бы сюда вообще, т.к. сделал то же самое в первую очередь
просто показалось, что многим может пригодиться. имхо очистить поле поиска по логинам/паролям проще, чем вбивать нужные
А я и не сомневался, что ты "сделал то же самое в первую очередь", но думая о других, я тоже решил продолжить тему и подсказать, что кнопки можно совместить уже сейчас, не дожидаясь "интеграции".
Отредактировано voqabuhe (16-12-2013 11:52:55)
Отсутствует
bunda1 пишетПопробуй через пункт "Показать пароли сайта" в меню "Инструменты":
На английской версии это нелегко сделать. Долго искал, но так и не нашёл как это сделать, даже на русской версии
Кстати, только в конце заметил, как мило смотрится пункт кнопки "Изменить" среди "Remove all" и "Show passwords", так и оставлю)
Ну вот же - в меню "Инструменты" на панели меню:
В коде легко поменять название кнопки на английский.
Отредактировано bunda1 (16-12-2013 14:57:04)
Отсутствует
После рестарта пропадает пункт меню "Показать пароли" в меню "Инструменты", если открыть редактор кнопки и нажать ОК то он появляется вновь до следующего рестарта.
После ПКМ - настроить, "Показать пароли" и кнопка "Изменить" дублируются.
Не наблюдаю и мне кажется тебе пора менять профиль на а то всё время непонятные проблемы. Кстати Сustom Buttons у тебя последний http://custombuttons.mozdev.org/devbuilds.html
Отсутствует
Не наблюдаю и мне кажется тебе пора менять профиль на а то всё время непонятные проблемы.
Да вроде он у меня довольно свежий, а ты в проверял? Попробую с новым профилем.
Кстати Сustom Buttons у тебя последний http://custombuttons.mozdev.org/devbuilds.html
Да.
Отсутствует
bunda1
Всё понял, это она так глючит только в этой новой PanelUI-menu-button, если переместить на любую панель, то всё ОК. Тогда получается что это баг Сustombuttons ?
Отсутствует
bunda1
Всё понял, это она так глючит только в этой новой PanelUI-menu-button, если переместить на любую панель, то всё ОК. Тогда получается что это баг Сustombuttons ?
Кажется был какой то код от этого, но где не помню точно.
Отсутствует
banbot
То же самое вчера хотел написать…
Отсутствует
Я конечно извиняюсь, но может не логини, а логины?
Или в русском языке произошли изменения, раз никто внимания не обращает?
Я исправил . Извините но русский язык для меня иностранный.
Отсутствует
// по клику на пункте открыть менеджер паролей с паролями для текущего сайта если они есть ....
Я открываю менеджер паролей в табе или в сайдбаре. Как добавить фильтр для текущего сайта в этом случае?
Отсутствует
Я открываю менеджер паролей в табе или в сайдбаре. Как добавить фильтр для текущего сайта в этом случае?
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 passwordManager = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("chrome://passwordmgr/content/passwordManager.xul") ); passwordManager.addEventListener("pageshow", function c(e) { this.removeEventListener( e.type, c ); setTimeout(function() { var filter = e.originalTarget.getElementById('filter'); filter.value = host; filter.doCommand(); }, 0); });
Отсутствует
Спасибо большое, bunda1! Работает!
Теперь еще надо бы добавить кнопку "Изменить" и в таб... ну, да ладно, не столь интересно... уже. Интереснее другое: у меня почему-то на некоторых страницах браузер не предлагает сохранить пароль... А возможно ли создать кроме кнопки "Изменить" и кнопку "Добавить"?
Отсутствует