Страницы: 1
Показать или спрятать пароль в окошке вода двойным кликом мыши ( Firefox 17+ )
Автор: bunda1
Версия: от 11.01.2014.
Описание: код даёт возможность двойным кликом мыши показать или спрятать пароль в полях вода пароля на страницах и окошках аутентификации входа на страницу или в других подобных окошках.
Использование: создайте новую Custom Buttons кнопку и положите код в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.
// Показать или спрятать пароль в окошке вода двойным кликом мыши, от 11.01.2014. ................................ (function () { // Наблюдатель следит за открытием всех окон .... function winObs( subject ) { subject.addEventListener("load", function l(e) { this.removeEventListener( e.type, l ); var passTextbox = subject.document.getElementById('password1Textbox'); if ( !passTextbox ) return; // добавлять и удалять обработчик двойного клика для окошка аутентификации входа на страницу passTextbox.addEventListener("dblclick", handleDblClick, false ); this.addEventListener("unload", function u(e) { this.removeEventListener(e.type, u ); passTextbox.removeEventListener("dblclick", handleDblClick, false ); }) }) }; Services.ww.registerNotification(winObs); addDestructor(function() { Services.ww.unregisterNotification(winObs) }); // Показать или спрятать пароль в окошке вода .... function handleDblClick(e) { if ( e.button ) return; var node = e.target; if ( node.hasAttribute("typechanged") ) { node.type = "password"; node.removeAttribute("typechanged"); return; } if ( node.hasAttribute("type") && node.getAttribute("type").toLowerCase() == "password" ) { node.type = "text"; node.setAttribute("typechanged", true); } }; addEventListener("dblclick", handleDblClick, false, gBrowser ); // обработчик двойного клика для страницы })();
Отредактировано bunda1 (11-01-2014 05:00:39)
Отсутствует
Ну, я попробовал процитировать контентскую часть
под многопроцессность, вроде работает.
((script, ID, NSVO) => { var nsvo = eval(NSVO), u = code => "data:," + encodeURIComponent(code); if (!(ID in nsvo)) { var processURL = u(script.replace(/%ID%/g, ID).replace("%NSVO%", NSVO)); Services.ppmm.loadProcessScript(processURL, true); nsvo[ID].processURL = processURL; Services.mm.loadFrameScript(nsvo[ID].frameURL = u(`${NSVO}["${ID}"].init(this);`), true); } addDestructor(reason => { if (reason[5] != "e" || !(ID in nsvo)) return; Services.mm.removeDelayedFrameScript(nsvo[ID].frameURL); Services.mm.loadFrameScript(u(`${NSVO}["${ID}"].destroy(this);`), false); Services.ppmm.removeDelayedProcessScript(nsvo[ID].processURL); Services.ppmm.loadProcessScript(u(`${NSVO}["${ID}"].forget();`), false); }); })(`\ (nsvo => nsvo["%ID%"] = { dblclick({target}) { if (target.hasAttribute("typechanged")) { target.type = "password"; target.removeAttribute("typechanged"); } else if ( target.hasAttribute("type") && target.getAttribute("type").toLowerCase() == "password" ) { target.type = "text"; target.setAttribute("typechanged", true); } }, init(cpmm) { cpmm.addEventListener("dblclick", this); cpmm.addEventListener("unload", this); }, destroy(cpmm) { cpmm.removeEventListener("dblclick", this); cpmm.removeEventListener("unload", this); }, handleEvent(e) {this[e.type](e);}, unload(e) {this.destroy(e.target);}, forget() {delete nsvo["%ID%"];} })(%NSVO%);`, `CB${_id.slice(20)}:PasswordTypeToggler`, `Components.utils.import("resource://gre/modules/Services.jsm", {})` );
Отсутствует
Ну, я попробовал процитировать контентскую часть
под многопроцессность, вроде работает.
Прекрасно работает, огромное вам спасибо!
Насчёт многопроцессности — не в курсе, отключена. Но, думаю, это значения не имеет.
Отсутствует
Страницы: 1