Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№130-04-2018 02:38:38

www300
Участник
 
Группа: Members
Зарегистрирован: 30-04-2018
Сообщений: 1
UA: Firefox 43.0

Расширение для работы с закладками

Доброго времени!
Пишу расширение. Не могу понять как добавить кнопку на форму "Добавлена в закладки", гор. клавиши Ctrl+D
SnimokPNG_5783434_30100435.jpg
Firefox 43.0.4, Windows 10 x64

может у кого пример есть, или подскажет что кужа написать!

Отсутствует

 

№230-04-2018 16:50:51

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 52.0

Re: Расширение для работы с закладками

Пример, в менеджер паролей добавляется кнопка "Изменить":

Выделить код

Код:

// Редактировать сохранённые логины и пароли, от 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)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]