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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№1480124-06-2020 10:13:49

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 77.0

Re: Custom Buttons

Dumby
Заметил такую шнягу , иконка плеера на панели больших размеров , чем 16х16 , а в контексте норм
Пришлось это убрать, может дорихтовать надо?

скрытый текст

Выделить код

Код:

var menu = self.appendChild(document.createXULElement("menupopup"));
self.image = "moz-icon://file://" + path;
var playerName = path.split("\\").pop().replace(".exe","");

Отсутствует

 

№1480224-06-2020 14:02:39

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 78.0

Re: Custom Buttons

Dumby пишет

похоже, исчезнет в Firefox 78

Nightly 79 - глюк как был так и есть,
в linux по другому воспроизводится, при переключении обратно на страницу в которой был mousedown но не было mouseup и click,
к курсору прикрепляется страница, как при перетаскивании
2020-06-24.png

Отредактировано Vitaliy V. (24-06-2020 14:07:07)

Отсутствует

 

№1480324-06-2020 14:27:52

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Vitaliy V. пишет

Nightly 79 - глюк как был так и есть

Поставил 78.0esr-candidates build2 (32-bit).
Всё работает как надо, глюка нет.


P.S. Посмотрим, что будет в релизной версии.

Отредактировано unter_officer (24-06-2020 14:33:46)


«The Truth Is Out There»

Отсутствует

 

№1480424-06-2020 14:45:37

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2074
UA: Firefox 78.0

Re: Custom Buttons

unter_officer пишет

Всё работает как надо, глюка нет.

Всё это когда на всех платформах работает как надо, а не только на [windows].
А ну да для [windows] юзеров только одна винда и существует...

Отсутствует

 

№1480524-06-2020 15:11:42

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Vitaliy V. пишет

А ну да для [windows] юзеров только одна винда и существует...

Ну, извини. Вот такие мы, виндузятники. Dv0vqt-XWo-AAOn-Qf.png


«The Truth Is Out There»

Отсутствует

 

№1480624-06-2020 22:18:09

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

solombala пишет

может дорихтовать надо?

Может быть, но это же надо на чём-то конкретном смотреть.
Попробуй прописать каких-нибудь подгоночных значений для CSS-свойств (типа width, height, padding)
self.icon.style.cssText = "…: … !important; …: … !important;";


Vitaliy V. пишет

в linux по другому воспроизводится, при переключении обратно на страницу в которой был mousedown но не было mouseup и click,
к курсору прикрепляется страница, как при перетаскивании

Проверил на 79 и Mint. Действительно, возвращаешься обратно, и указатель мыши
цепляет ссылку, и не отпускает, пока не кликнешь где-нибудь, или пока не нажмёшь Esc.
Наблюдается, даже если всё в родительском процессе, например самоссылки на странице about:license

Отсутствует

 

№1480724-06-2020 23:17:24

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 77.0

Re: Custom Buttons

Dumby

Dumby пишет

self.icon.style.cssText = "…: … !important; …: … !important;";

Да, подравнял...Ох уж это десятка, если бы не новый лэптоп, хрен семеру поставишь...

Отсутствует

 

№1480825-06-2020 15:15:12

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 68.0

Re: Custom Buttons

Всем привет, ищу кнопку добавляющую поиск в гугле(например) в контекстное меню
Чтобы выделил слово - открыл контекстное меню - нажал кнопку - открылась вкладка с поиском
Киньте пожалуйста у кого есть

Отсутствует

 

№1480925-06-2020 16:44:53

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 68.0

Re: Custom Buttons

Все что нашел, это вот код добавляющий ссылку на любой сайт в контекстное меню

Выделить код

Код:

((contextMenu) => {
   var array = [
      { lab: "Новая вкладка", url: "about:newtab", img: "https://addons.cdn.mozilla.net/user-media/collection_icons/5574/5574260.png?m=1426540508"},
      { lab: "Google", url: "https://www.google.com", img: "https://www.google.lv/favicon.ico"},
      { lab: "Youtube", url: "https://www.youtube.com/", img: "https://www.youtube.com/favicon.ico"}
   ]
   array.forEach(function(m,i) {  
       var mItem = document.createElement("menuitem");
       mItem.setAttribute("label", m.lab );
       mItem.setAttribute("id", "link"+i );
       mItem.setAttribute("url", m.url );
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.setAttribute("image", m.img );
       mItem.addEventListener("click", openLink );
       
       contextMenu.appendChild( mItem );
   });
   function openLink(e) {
      var url = e.target.getAttribute("url");      
      e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : loadURI(url);
   };

   addDestructor(()=> array.forEach(function(m,i) contextMenu.removeChild(document.getElementById('link'+i)) ));
          
})(document.getElementById("contentAreaContextMenu") );

Если кто может помогите пожалуйста сделать чтобы искало выделеное на странице слово

Отсутствует

 

№1481026-06-2020 00:26:30

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 78.0

Re: Custom Buttons

Dumby, ну подправьте пожалуйста этот код для работы в user_chrome_files, для актуальных версий firefox.
А то подключил к комплекту, скрипт работает, да только при каждом клике, помимо того, что открывается новая вкладка, так ещё и окно разворачивается/сворачивается.
Юзерскрипты подключаю по этому методу, хотя наверное не столь важно. Спасибо.

Отсутствует

 

№1481126-06-2020 01:37:18

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Есть код взятый отсюда.
Сразу оговорюсь, код правил под себя, т.е. выкинул из него всё то, что мне не нужно.
Код прекрасно работает на крайней версии [firefox].


скрытый текст

Выделить код

Код:

/*Initialization Code*/

// Simple Session Manager (https://forum.mozilla-russia.org/viewtopic.php?pid=744023#p744023) ..........

// Подсказки для кнопки .....
this.tooltipText = "Simple Session Manager\n\
------------------------------\n\
Л:   Меню сессий\n\
дЛ: Сохранить сессию\n\
П:   CB меню";

// Настройка функций кликов мыши .....
this.onmousedown =e=> {

  this.onmouseup =e=> {        // левый клик
    if ( e.button ) return;
    clearTimeout(self.timer);
    self._handleClick =()=> menupopup.openPopup(this, "after_start");
  }

  if ( e.button == 0 ) {       // длинный левый клик
    self.timer = setTimeout(()=> {
    self.onmouseup = '';
      saveCurrentSession();
    }, 500);
  }

  if ( e.button == 2 ) {       // правый клик
    gShowPopup(this);
  }

}
self.onclick =e=> e.preventDefault();


var menupopup = self.appendChild(document.createXULElement("menupopup"));
menupopup.id = "ssm_menupopup";

var scs = document.createXULElement("menuitem");
scs.setAttribute("label", "Сохранить сессию");
scs.setAttribute("class", "menuitem-iconic");
scs.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKVSURBVHjajFNNTBNREJ6+7na73bLbQn8I0BKNCYWKGr0oYoiJPxeNh6oHozcOxgSVi4le1JNHQRPigRsewURNPKiJMQicSISUACelRVJ2tz/bdktpy9adBzT8xTjJ5L35ezNv5hsLHEAv7noEntguChx7EuV8oTydKRhfno8kCnt9LTuFZ7f87mAz/8rnl86GOoOBBq+LQX1S1ioLs0txWdEmsulS38Phlcy+BwZ6W0L+JsfolcjpsFDnBKNcgQ193bRUwSrwQFgr6Dkd3o9NzilqMdI/FF+sPYCZ245I4zdunw9DtQr6LxlK6bVdpdrcPAiHfGBYLDD69ltUXsmfw0oIGoPNjkHMjMHa3J9asDyRpoyEOrQR0+dq5MxR0c29Rj3Bhvn8YjeWjZmN9cpWcApSkzpkptYg8T1FdWjTfysg1Ang9YtdT+80OogTbJc7OlsD+OftzOqsBrMflqHe6QKXIEL00zLV0UpSBbM/G9DeEQy6OXKJsfPsCbdXYjb0Yu2/nmMS9LSGYGlYpXLPkxCwkq1mR98Gn8Q4XexxYhhgYKf3TPTfRDaPqklkvViaSSpaxSpw/x1v5e0UG8W10k+iW8qfF2ZiccIydFQ7ScsXKO8ep4NiYj4ai6k5+Eoev1F1Wcn8QJDgnAnHbGYRWTh800cZ77Ryzmr6eCGXzYGiZCcQ2vQ32XT5PiIMTJBI4Waw1ZtZzLu7XaSMd1s9b9paKJA+vpuKqols3y4ov7wXaPN67GPXIl1hnDOOansyVicHhGHMzHkzeDKqqPnr/UOJxX3LNNDb5BJd3KC3Uexu7wgEGxq3limRqcxH47FVWRtPreYePBpJagdu4zYhwjx1cMFus59CuVgqTmPDDlrnvwIMAGS8IFCLagHpAAAAAElFTkSuQmCC");
scs.addEventListener("command", saveCurrentSession, false);
menupopup.appendChild(scs);

var menusep = document.createXULElement("menuseparator"); // Сепаратор .....
menupopup.appendChild(menusep);

var savedSessions = loadFile(); // Сохраненный список .....
for (name in savedSessions) {
  makeitems(name);
}

// overwrite = 1 - Открыть сессию в текущем окне (все открытые вкладки будут закрыты) .....
// overwrite = 0 - Добавить вкладки в текущее окно (сессия будет добавлена к уже открытым вкладкам) .....
var overwrite = 1,
Cc = Components.classes,
Ci = Components.interfaces,
Cu = Components.utils,
SS = "nsISessionStore" in Components.interfaces ? ( Components.classes["@mozilla.org/browser/sessionstore;1"] || Components.classes["@mozilla.org/suite/sessionstore;1"] )
      .getService(Components.interfaces.nsISessionStore) : SessionStore;

if (!window.Services) { Cu.import("resource://gre/modules/Services.jsm"); }

// Функции работы с файлами .....
function saveFile(data) {
  var file = Services.dirsvc.get('UChrm', Ci.nsIFile);
  file.append("simple_session_manager.json");

  var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
  suConverter.charset = 'UTF-8';
  data = suConverter.ConvertFromUnicode(data);

  var foStream = Cc['@mozilla.org/network/file-output-stream;1'].createInstance(Ci.nsIFileOutputStream);
  foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0);
  foStream.write(data, data.length);
  foStream.close();
}

function loadFile() {
  var file = Services.dirsvc.get('UChrm', Ci.nsIFile);
  file.append("simple_session_manager.json");
  if (file.exists() === false) return false;
  var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
  var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
  fstream.init(file, -1, 0, 0);
  sstream.init(fstream);

  var data = sstream.read(sstream.available());
    try { data = decodeURIComponent(escape(data)); } catch(e) {}
  sstream.close();
  fstream.close();
  if (data === "undefined") return false;
  data = JSON.parse(data);
  return data;
}

// Получить текущее время .....
function getTime() {
  var d = new Date();
    function addzero(t) {
      (t < 10) ? t = '0' + t : t;
      return t;
    }
  var t = addzero(d.getFullYear()) + '.' + addzero(d.getMonth()+1) + '.' + addzero(d.getDate()) + '-' + addzero(d.getHours()) + ':' + addzero(d.getMinutes()) + ':' + addzero(d.getSeconds());
  return t;
}

// Получить название вкладки .....
function getTabLabel() {
  var label = gBrowser.selectedTab.label;
  return label.substring(0, 70);
}

// Сохранение сессий .....
function saveSession(ssdata) {
  var name = prompt('Сохранить:', getTabLabel() + ', ' + gBrowser.tabs.length + ' (B) ' + '[' + getTime() + ']' );
    if (name != null) {
      if (loadFile() === false) { var data = {}; }
      else { var data = loadFile(); }
        if (data[name]) { alert('Сессия с тем же именем уже существует!'); return; }
          data[name] = JSON.parse(ssdata);
          saveFile(JSON.stringify(data));
          makeitems(name);
    }
}

// Сохранить текущую сессию .....
function saveCurrentSession() {
  var ssdata = SS.getBrowserState();
  saveSession(ssdata);
}

// Удалить сессию .....
function remove() {
  var node = this.parentNode.parentNode;
  var name = node.getAttribute("label");
  var cf = confirm('Вы уверены, что хотите удалить ' + name + ' ?');
    if (cf === true) {
      node.style.display = "none";
      var data = loadFile();
      delete data[name];
      saveFile(JSON.stringify(data));
    }
}

// Переименовать сессию .....
function rename() {
  var node = this.parentNode.parentNode;
  var name = node.getAttribute("label");
  var newname = prompt('Переименовать ' + '"' + name + '"' + ' в:', 'введите новое имя');
  if (!newname) return;
  this.parentNode.parentNode.setAttribute("label", newname);
  var data = loadFile();
  var value = data[name];
  data[newname] = value;
  delete data[name];
  saveFile(JSON.stringify(data));
}

// Восстановить сессию .....
function restoreSession(stateString) {
  if (typeof stateString === "string") {
    var state = stateString;
  }
  else {
    var name = this.parentNode.parentNode.getAttribute("label");
    var data = loadFile();
    var state = JSON.stringify(data[name]);
  }
  switch (overwrite) {
    case 0:
    SS.setWindowState(window, state, false);
    break;

    case 1:
    SS.setBrowserState(state);
    break;
  }
}

// Создаем меню .....
function makeitems(name) {
  var ss = document.createXULElement("menu");
  ss.setAttribute("label", name);
  ss.setAttribute("class", "savedSessions");
  ss.className = "menu-iconic";
  ss.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAEnQAABJ0BfDRroQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGxSURBVDiNnZE/T1NRGMZ/7zn3lmKLkIKpaUxZFINEJZ0YHXRwcnBxMQ6aOJi4+FH8Dm5OOjA4+AEYGCTRook1JlVIVUrbW/rnPg63UtReIr7bOXmf5/ye59jDlanHS3O+wn/Mu+/DF8HFeVe5f+vaPTdfPpF4UNvk6frmhwAvXOEsvrR0IoN47xM4CHCADmDQBkAHbdTrTBRZdgYLs6NTD/MiMC+gC8MO6ke8ffWsXv3S3JpksHouv7Z4/UEeM8z6IwKfEGjYRt0G1d3m1p3n0Y1JBi/vTtfKw1Yec2CHBDFmXYjboAgL4tTc5pXsmcNcDxIDUFQHuqgfYT69OAuE9qqAoX4jIcAL7b9H+0deOYYg3tkYXxx2EAo7dQYEBF/TEULD5oow7KHut18RhGVD3GwxMZ36YWn6IJd37vQCSMSNBpYQCMs43PQMAJXlwtr6k7CGfo9iznN1ebGY7Ak1NSJwYERYJgM+Q+nClVzp/OXc3wWMwdT+jAVKCMwLC2PUeoMrrEI4m94BQq0a6mxjoca/YKFgUCfeqR8jPhoHcIAHe3ST2+UFLv2T8o/5uMvrnx9Wn65p5nMEAAAAAElFTkSuQmCC");

  var ss_popup = document.createXULElement("menupopup");
  var rs = document.createXULElement("menuitem");
  rs.setAttribute("label", "Восстановить");
  rs.setAttribute("class", "menuitem-iconic");
  rs.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAACzElEQVQ4jX2QPWwbZRjHf+/5vfPdObZjO3Ga2pVpGtxCP4QIDKgqDCDUNQwgJCS2qFI3hBCRCvXSCcTAAu0GY0Fi4kuq+IjUCpWAgCTq4IpS3Di2G8c+x/bZ57t7mSJFMfBf/3p+z+95BPvy3pufxqKmcVY3ZFFKmQtFGIReuNnrDze6lv5TqfSyx4EIgA/e+fzkZML6MDmVnD80mz1kxW3DMAxQCs/z6Hb6g3q1Xt1ttdfa7dbFN668vrkHkADJhPntufNnc0LTDi7AjFkkUknzcGF2LvCDuZVvfiwCj+/1GoAmhL3x6x2cZhsVqjFIGIZs15ts/LJOJCLt/Z0EiE3Y9eLpR1ONaoMH9zbHAGiC9FSKkwunWF1Z3RoDABhRg/zRPPmj+XHA/0QDaLectFLj6gcT+AHdTm9mzMC27e766lrWtCwy2Qz2hIUeNVDAaDCku9ujWW/ij3wsO9oaMzCiunf66TMU5gt4wyGbf1Upr5W5u15mq1JDhYqZQo6HIuqtueLw4vLXzwC89NZXeQFw/ePv7zx5buHEf6nf3qgMVipOGE0ko6EKhoQi3NnZ+c51BwsaQLOxM9N1uv86vNtz+aHSDn0pH9S2tl6r/Pn3s/VG/WYunzs/NZ2OSID0dKpRrzZS98v3kYbEsi1004BQcbtc9Q07bdYb229/dvmFL5aWVvVts9mq1Wo/e54vJIAQqGOPzQHgj3zcvos39BAIBshRqJQYjYZ/AFy79tQIeHVx+ctiIDRTA+g43Xud9q4PIHVJPBknk82QzqY5VZg2UUrEYhOX9s5aXL5RnMykb8Rj9kcC4OrSVZ1Hpt+PJ5PPz+SzR5KpyYRpGgRKMei7fHLr7lBmZ1XHcX4LgsCxLPt4JBLRm82Hr4j9DyuVSprdO/ZELGafkXpkXtPA94OK03Vv/R4/csEw5XOGbuieN6y6bv/S9XdfvPkPTgcoDlpQJpwAAAAASUVORK5CYII=");
  rs.addEventListener("command", restoreSession, false);

  var rn = document.createXULElement("menuitem");
  rn.setAttribute("label", "Переименовать");
  rn.setAttribute("class", "menuitem-iconic");
  rn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPFJREFUeNrEU0sOgkAMbc1IIHoQT+KeY7hkBW5ccwLdsOICxI2X8peIGhggI21gggpCwsImM01f+tpOO0WlFIwR0efgeR5nsG0boihizPd91A5UwZDjuq5qwycwUkQYhttSr4Y4l76fDdtBEAQqz3OVZdnPQ09o2sQhrpBSQgnAen/qzLxZzljHcawxy7KAuCJNUyiKAm53SS0FBGQNlUW3lFO2iVCLYRhAXJEkCQPn65NGAswpL/4fWAebt1ZGXB3geHlw9maXsKqjS94CHNxF7xRM0/wKgI7jDBojvbnZAz3Gv/9E7NvGvmXCsev8EmAAWocA9ofpaRIAAAAASUVORK5CYII=");
  rn.addEventListener("command", rename, false);

  var rm = document.createXULElement("menuitem");
  rm.setAttribute("label", "Удалить");
  rm.setAttribute("class", "menuitem-iconic");
  rm.setAttribute("image", "data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABt0lEQVQ4ja2RT2sTURTFz8tk0nntFAQrVLBQxIUg/tkkMoLyIEVECHZhNrrxI+hOP5Mb6eBCcEipYIjZ2LpvhFasUtBSkwzOve+6mE6YSScuxLt67753fudyLvA/a7T+qCHmiTfrfWCMd3j9diPfq2SHX+uPnzJx71gP33w3bX9avBcE2j+SkK30Di7ffJ71VebMxD1hC2GGEEfH41prpftynIm92A0t2aYQQYgBThrndz/2KwCgf9Z2LNtImFOAtc356ijcCwJdJrZEUWzPfJpMAAAStPWR/h2Ktc10CoIQRUKEabFNvNbKfndcAKSjtrVfHW5YorWTzxDKYAxLtOWM+P7yt51hIYPpsDTNTyB/EwNAtWxdMuV8GCfbgxjxIviUYSV/SQOrbVjitbx4N8alBeXcdZR+3Tl3xS8FlIkt0dbnWH3xlbPgKgUo3HEq+tX7C4EuAAbGeOmqCuLIJt69s3PeQ1epKGfapCQJO6vGmwAWf/C1Wau6td8dV123BaAAUfHw6gSwtP3ugxA/y6X9INszAOQgbwFAIC/MQb9/Kv2vF2/UByejlVVn1Xiby/X6rPd/qj/1ak71UYKuwQAAAABJRU5ErkJggg==");
  rm.addEventListener("command", remove, false);

  ss_popup.appendChild(rs);
  ss_popup.appendChild(rn);
  ss_popup.appendChild(rm);
  ss.appendChild(ss_popup);
  menupopup.appendChild(ss);
}

Решил я потестировать будущую версию ESR, поставил [firefox] 78 ESR RC2 (x86) - https://archive.mozilla.org/pub/firefox … es/build2/
На ней этот код тоже работает, но при вызове функции prompt, в консоли появляется ошибка:
Prompter: Browser not available or tab modal prompts disabled. Falling back to window prompt. Prompter.jsm:1051


В принципе эта ошибка ни на что не влияет, код работает нормально, но хотелось бы от неё избавиться. Не подскажите как?

Отредактировано unter_officer (26-06-2020 02:11:53)


«The Truth Is Out There»

Отсутствует

 

№1481226-06-2020 09:41:56

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

sandro79 пишет

ну подправьте пожалуйста этот код для работы в user_chrome_files, для актуальных версий firefox.
А то подключил к комплекту, скрипт работает, да только при каждом клике, помимо того, что открывается новая вкладка, так ещё и окно разворачивается/сворачивается.

скрытый текст

Выделить код

Код:

(sel => {
	var bot = e => !(e.button || e.ctrlKey || e.shiftKey || e.altKey)
		&& e.target.matches(sel) && BrowserOpenTab(e.preventDefault());
	var bar = document.getElementById("TabsToolbar");
	bar.addEventListener("dblclick", bot, false);
	addEventListener("unload",
		() => bar.removeEventListener("dblclick", bot, false)
	, {once: true});
})("#tabbrowser-arrowscrollbox,toolbarspring,#TabsToolbar");

unter_officer пишет

при вызове функции prompt, в консоли появляется ошибка

Увы, дело здесь не в коде.
Можешь просто alert(); запустить и полюбоваться на эту же ошибку.
Видимо, когда затеяли баг,
идея гадить пользователю в консоль показалась им хорошей.


Конкретно prompt в кнопке можно свой попробовать запилить, примерно как-то так

скрытый текст

Выделить код

Код:

var prompt = (msg, value) => {
	var res = {value};
	var ok = Services.prompt.wrappedJSObject
		.pickPrompter({domWin: window, modalType: Ci.nsIPrompt.MODAL_TYPE_WINDOW})
		.nsIPrompt_prompt(null, msg, res, null, {});
	return ok ? res.value : null;
}


Ну или может попытаться подлечить сам Prompter.jsm для всего.

Отредактировано Dumby (26-06-2020 09:42:57)

Отсутствует

 

№1481326-06-2020 12:12:05

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Конкретно prompt в кнопке можно свой попробовать запилить, примерно как-то так

Dumby, спасибо! Теперь всё нормально, ошибки нет.
Там ещё такая же история с confirm, но это я решил путем замены confirm на custombuttons.confirmBox.


«The Truth Is Out There»

Отсутствует

 

№1481426-06-2020 12:22:45

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 33
UA: Firefox 52.0

Re: Custom Buttons

как создать Windows-ярлык (.lnk)?
Имеется файл, к примеру,
"C:\Мой файл.txt"
на который необходимо создать Windows-ярлык, к примеру,
"Тест.lnk"
в папке "D:\Мое хранилище"
как создать кнопку, которая при нажатии реализовала такую операцию
(это конечно шаблон для более сложных построений).
Что-то читал про объект XPInstall file.windowsShortcut но не могу увязать в единое целое те скупые сведения почти без примеров, которе нашел через Гугл

Отсутствует

 

№1481526-06-2020 12:47:24

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Конкретно prompt в кнопке можно свой попробовать запилить, примерно как-то так

скрытый текст

Выделить код

Код:

var prompt = (msg, value) => {
	var res = {value};
	var ok = Services.prompt.wrappedJSObject
		.pickPrompter({domWin: window, modalType: Ci.nsIPrompt.MODAL_TYPE_WINDOW})
		.nsIPrompt_prompt(null, msg, res, null, {});
	return ok ? res.value : null;
}

Dumby, если не сложно, набросайте такие же свои функции для alert(); и confirm();
Думаю, пригодятся в будущем.


«The Truth Is Out There»

Отсутствует

 

№1481626-06-2020 14:54:21

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 78.0

Re: Custom Buttons

Dumby пишет

скрытый текст

Благодарю, теперь всё в норме! :beer:

Отсутствует

 

№1481726-06-2020 18:31:57

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

ruslaw пишет

как создать Windows-ярлык (.lnk)?
Имеется файл, к примеру,
"C:\Мой файл.txt"
на который необходимо создать Windows-ярлык, к примеру,
"Тест.lnk"
в папке "D:\Мое хранилище"
как создать кнопку, которая при нажатии реализовала такую операцию

Выпилено в Firefox 60 (bug).

скрытый текст

Выделить код

Код:

var shortcut = FileUtils.File("D:\\Мое хранилище")
	.QueryInterface(Ci.nsILocalFileWin);
shortcut.append("Тест.lnk");

var trg = FileUtils.File("C:\\Мой файл.txt");

shortcut.setShortcut(trg);

unter_officer пишет

если не сложно, набросайте такие же свои функции для alert(); и confirm();

Так всё то же самое

скрытый текст

Выделить код

Код:

var alert = msg => Services.prompt.wrappedJSObject
	.pickPrompter({domWin: window, modalType: Ci.nsIPrompt.MODAL_TYPE_WINDOW})
	.alert(null, msg);

var confirm = msg => Services.prompt.wrappedJSObject
	.pickPrompter({domWin: window, modalType: Ci.nsIPrompt.MODAL_TYPE_WINDOW})
	.confirm(null, msg);

Отсутствует

 

№1481826-06-2020 18:49:15

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Так всё то же самое

скрытый текст

Выделить код

Код:

var alert = msg => Services.prompt.wrappedJSObject
	.pickPrompter({domWin: window, modalType: Ci.nsIPrompt.MODAL_TYPE_WINDOW})
	.alert(null, msg);

var confirm = msg => Services.prompt.wrappedJSObject
	.pickPrompter({domWin: window, modalType: Ci.nsIPrompt.MODAL_TYPE_WINDOW})
	.confirm(null, msg);

Dumby, спасибо большое!


«The Truth Is Out There»

Отсутствует

 

№1481926-06-2020 19:35:25

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 33
UA: Firefox 52.0

Re: Custom Buttons

Dumby, огромное спасибо, работает!

Отсутствует

 

№1482026-06-2020 21:33:33

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 33
UA: Firefox 52.0

Re: Custom Buttons

И все-таки продолжу еще:
1) как добавить путь к иконке, напр. "D:\\temp\\ico.dll" iconId=3  ?
2) как будет выглядеть код кнопки копирующей, перемещающей и удаляющей файл

Отредактировано ruslaw (27-06-2020 01:19:57)

Отсутствует

 

№1482127-06-2020 19:09:14

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1728
UA: Firefox 52.0

Re: Custom Buttons

Dumby
Возможно ли сделать для [firefox] 68+ "в виде кнопки CB или скрипта для...", очистку хвостов -> (Profile/extensions/staged, trash; Profile/browser-extension-data; Profile/storage/default) после удаления расширения ?


Win7

Отсутствует

 

№1482228-06-2020 12:02:23

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

ruslaw пишет

И все-таки продолжу еще:
1) как добавить путь к иконке, напр. "D:\\temp\\ico.dll" iconId=3  ?

А что, по ссылке что-то непонятное написано?
И «напр.» какой-то странный, у меня такой dll'ки нет.

скрытый текст

Выделить код

Код:

var shortcut = FileUtils.File("D:\\Мое хранилище\\Тест.lnk")
	.QueryInterface(Ci.nsILocalFileWin);

var trg = FileUtils.File("C:\\Мой файл.txt");
var icon = Services.dirsvc.get("SysD", Ci.nsIFile);
icon.append("imageres.dll");

shortcut.setShortcut(trg, null, null, null, icon, 102);

ruslaw пишет

2) как будет выглядеть код кнопки копирующей, перемещающей и удаляющей файл

Если внимательно прочитать про nsIFile, и вдумчиво применить,
то код кнопки, скорее всего, будет выглядеть хорошо.

kokoss пишет

Возможно ли сделать для [firefox] 68+ "в виде кнопки CB или скрипта для...", очистку хвостов -> (Profile/extensions/staged, trash; Profile/browser-extension-data; Profile/storage/default) после удаления расширения ?

Звучит как малополезная и небезопасная затея.
Но если хочешь нахлобучить какой-нибудь тестовый
неповседневный браузер, тогда попробуй в custom_script.js
(trash не вписал, не знаю что надо сделать,
чтобы эта папка в extensions нарисовалась).

скрытый текст

Выделить код

Код:

try {(g => g.AddonManager.addAddonListener({
	get staged() {
		var prof = this.storage = Services.dirsvc.get("ProfD", Ci.nsIFile);
		var staged = prof.clone();
		["extensions", "staged"].forEach(staged.append);
		(this.data = prof.clone()).append("browser-extension-data");
		["storage", "default"].forEach(prof.append);
		delete this.staged;
		return this.staged = staged;
	},
	onUninstalling(addon) {
		if (addon.type == "extension" && addon.isWebExtension) try {
			this.uuids = JSON.parse(Services.prefs.getStringPref(
				"extensions.webextensions.uuids", "{}"
			));
		} catch {this.uuids = {};}
	},
	onUninstalled(addon) {
		if (addon.type != "extension") return;
		var {id} = addon;
		this.remove(this.staged, id, true);
		if (!Array.from(this.staged.directoryEntries).length)
			try {this.staged.remove(false);} catch {}
		if (!addon.isWebExtension) return;
		this.remove(this.data, id, true);
		var uuid = this.uuids[id];
		uuid && this.remove(this.storage, "moz-extension+++" + uuid);
	},
	remove(dir, str, once) {
		if (!dir.exists()) return;
		var trg = once ? this.eq : this.sw;
		for(var entry of dir.directoryEntries)
			if (trg(entry.leafName, str))
				try {entry.remove(true);} finally {if (once) break;}
	},
	eq: (str1, str2) => str1 == str2,
	sw: (str1, str2) => str1.startsWith(str2)
}))(Cu.import("resource://gre/modules/AddonManager.jsm", {}));}
catch (ex) {Cu.reportError(ex);}

Отсутствует

 

№1482328-06-2020 14:14:47

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 33
UA: Firefox 52.0

Re: Custom Buttons

Dumby, большущее спасибо. Попытаюсь с nsIFile, но если не получится все-так еще раз спрошу :D

Отсутствует

 

№1482428-06-2020 18:07:32

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1728
UA: Firefox 52.0

Re: Custom Buttons

Dumby
Спасибо!


Win7

Отсутствует

 

№1482529-06-2020 16:30:40

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 52.0

Re: Custom Buttons

«Merge Day»


custom_buttons-0.0.7.0.0.15-fx-paxmod.xpi
custom_buttons-0.0.7.0.0.15-fx-bootstrap.xpi


[?] Custom Buttons для Thunderbird 78
Только для TB, и только для 78.
custom_buttons-78.0-tb.xpi
Да, и DOMi 7.0.7 тоже можно
попробовать поставить (paxmod, разумеется).

Отсутствует

 

Board footer

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