>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB]Редактировать сохранённые логины и пароли http://forum.mozilla-russia.org/viewtopic.php?id=61270 |
bunda1 > 15-12-2013 22:55:50 |
Редактировать сохранённые логины и пароли ( Firefox 17+ ) Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую. Выделить код Код:// Редактировать сохранённые логины и пароли, от 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) }); })(); |
voqabuhe > 15-12-2013 23:38:56 |
bunda1 |
bunda1 > 16-12-2013 00:02:29 |
voqabuhe пишет
Наверно можно но я не знаю как. Буду думать. |
difabor > 16-12-2013 00:35:03 |
bunda1 пишет
Я, конечно, в этом мало что смыслю (как и во многом остальном |
bunda1 > 16-12-2013 00:56:53 |
difabor |
voqabuhe > 16-12-2013 01:03:11 |
difabor пишет
Это совсем не то, кнопку попробуйте и сами всё поймёте. |
dennius > 16-12-2013 01:51:15 |
bunda1 |
bunda1 > 16-12-2013 01:59:04 |
dennius пишет
Это можно. Нужно что бы пункт меню открывал редактор паролем сайта, чтобы не искать, так что ли? 16-12-2013 02:19:42 Выделить код Код:// Редактировать сохранённые логини и пароли, от 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) }); })(); |
voqabuhe > 16-12-2013 02:20:30 |
dennius пишет
Ну и добавь в ту кнопку, я именно так и сделал. |
dennius > 16-12-2013 07:51:10 |
bunda1 пишет
На английской версии это нелегко сделать. Долго искал, но так и не нашёл как это сделать, даже на русской версии Всё-таки остановлюсь на версии кнопки из моей ссылки с добавлением вашего кода. Ведь та кнопка не только позволяет не искать пароль среди других, она еще и моментально выводит его прямо с панелей браузера, без лишних движений ака поиски во всяких меню. И да, спасибо огромное за ваши кнопки! Без них на голом файрфоксе уже неуютно voqabuhe пишет
ну если бы я думал только о себе, то не писал бы сюда вообще, т.к. сделал то же самое в первую очередь |
voqabuhe > 16-12-2013 11:47:47 |
bunda1 16-12-2013 11:52:55 dennius пишет
А я и не сомневался, что ты "сделал то же самое в первую очередь", но думая о других, я тоже решил продолжить тему и подсказать, что кнопки можно совместить уже сейчас, не дожидаясь "интеграции". |
bunda1 > 16-12-2013 14:42:46 |
dennius пишет
Ну вот же - в меню "Инструменты" на панели меню: |
bunda1 > 16-12-2013 15:32:22 |
voqabuhe пишет
Не наблюдаю и мне кажется тебе пора менять профиль на |
voqabuhe > 16-12-2013 15:40:16 |
bunda1 пишет
Да вроде он у меня довольно свежий, а ты в bunda1 пишет
Да. |
bunda1 > 16-12-2013 15:49:38 |
Да я на последнем |
voqabuhe > 16-12-2013 16:15:37 |
bunda1 |
bunda1 > 16-12-2013 17:03:16 |
voqabuhe пишет
Кажется был какой то код от этого, но где не помню точно. |
voqabuhe > 16-12-2013 17:33:35 |
bunda1 пишет
Я думал это в custombuttons-0.0.5.7pre3-2013 1124 уже исправили. |
voqabuhe > 17-12-2013 10:00:22 |
bunda1 пишет
Ну теперь просто всё очень замечательно, спасибо. |
banbot > 17-12-2013 11:31:54 |
|
littleleshy > 17-12-2013 15:27:47 |
|
bunda1 > 17-12-2013 16:27:26 |
banbot пишет
Я исправил |
LBra > 20-12-2013 07:25:40 |
bunda1 пишет
Я открываю менеджер паролей в табе или в сайдбаре. Как добавить фильтр для текущего сайта в этом случае? |
bunda1 > 20-12-2013 18:49:43 |
LBra пишет
Выделить код Код: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); }); |
LBra > 21-12-2013 00:25:13 |
Спасибо большое, bunda1! Работает! |
bunda1 > 21-12-2013 00:34:22 |
LBra пишет
Нет не смогу |
voqabuhe > 21-11-2015 13:46:42 |
bunda1 |
bunda1 > 21-11-2015 19:41:30 |
voqabuhe пишет
В Developer пароли можно увидеть и редактировать если кликнуть двойной клик на точки которые отображаются вместо паролей в менеджере логинов: |