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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№1475123-06-2020 11:06:51

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

Re: Custom Buttons

Dumby
Ну с macromedia давно справился. винрар - это винда косячит...А вот с «--panel-disabled-color не понятно. хотите сказать , что меняется колор "востановить пред...сессию" , когда нет этой сессии?
И еще такие же места "Пусто" и т.д ?  Не верю...Извиняюсь, нашел косяк toolbarbutton.css
НУЖЕН ТОЛЬКО ЭТОТ winrar-x64-591b1 ...Т.к версия винды новая . Теперь гуд!

Отредактировано solombala (23-06-2020 17:46:01)

Отсутствует

 

№1475223-06-2020 14:46:23

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

Re: Custom Buttons

Есть вопросик.
Например, имеем такой код:

Выделить код

Код:

var selectionTxt = document.commandDispatcher.focusedWindow.getSelection();
var url = 'https://translate.google.com/#view=home&op=translate&sl=auto&tl=ru&text=';
var txtUrl = (url + encodeURIComponent(selectionTxt));
gBrowser.selectedTab = gBrowser.addTab(txtUrl, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() });

В однопроцессорном режиме работает нормально - открывается новая вкладка translate.google.com, вставляется текст и происходит перевод текста.
В многопроцессорном режиме - открывается новая вкладка translate.google.com, а вот текст не вставляется. Консоль при этом молчит.


Как сделать, чтобы работало в многопроцессорном режиме?

Отредактировано unter_officer (23-06-2020 14:47:34)


«The Truth Is Out There»

Отсутствует

 

№1475323-06-2020 15:22:15

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 77.0

Re: Custom Buttons

unter_officer попробуй

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

Выделить код

Код:

let browserMM = gBrowser.selectedBrowser.messageManager;
 browserMM.addMessageListener('getSelect', function listener(message) {
   // создать текст для записи
    var selectionTxt = message.data; 
    var url = 'https://translate.google.com/#view=home&op=translate&sl=auto&tl=ru&text=';
var txtUrl = (url + encodeURIComponent(selectionTxt));
gBrowser.selectedTab = gBrowser.addTab(txtUrl, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() });
 browserMM.removeMessageListener('getSelect', listener, true);
});
        browserMM.loadFrameScript('data:,sendAsyncMessage("getSelect", content.document.getSelection().toString())', false);

Отсутствует

 

№1475423-06-2020 15:46:35

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

Re: Custom Buttons

Andrey_Krropotkin, большое спасибо! Всё работает.


«The Truth Is Out There»

Отсутствует

 

№1475524-06-2020 03:01:29

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

Re: Custom Buttons

Есть такой код:

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

Выделить код

Код:

/*Initialization Code*/

// Открывать ссылки длинным кликом ..........
(code => {
    var delay = 500;               // время удержания в мс
    var inBackground = false;      // открывать в фоновой вкладке
    var relatedToCurrent = false;  // открывать рядом с related вкладкой

    var p = "CB" + _id.slice(20) + ":LongPressHandler:";
    var msgDestroy = p + "Destroy", msgResponse = p + "Response";
    code = code.replace(/%MD%/g, msgDestroy).replace("%MR%", msgResponse)
        .replace("%DL%", delay).replace("%BG%", inBackground);

    var url = "data:," + encodeURIComponent(code);
    var mm = window.getGroupMessageManager("browsers");
    mm.loadFrameScript(url, true);

    function handleLongPress(msg) {
        var [link, ref, ctrl] = msg.data;
        var bg = inBackground != null ? inBackground
            : Services.prefs.getBoolPref("browser.tabs.loadInBackground");
        gBrowser.loadOneTab(link, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }), {
            relatedToCurrent, inBackground: ctrl != bg, //referrerURI: makeURI(ref)
        };
    }
    mm.addMessageListener(msgResponse, handleLongPress);

    addDestructor(() => {
        mm.removeDelayedFrameScript(url);
        mm.broadcastAsyncMessage(msgDestroy);
        mm.removeMessageListener(msgResponse, handleLongPress);
    });
})(`({
    init() {
        addEventListener("mousedown", this, false);
        addMessageListener("%MD%", this);
    },
    receiveMessage() {
        removeEventListener("mousedown", this, false);
        removeMessageListener("%MD%", this);
    },
    handleEvent(e) {
        if (e.type == "mousedown") {
            if (e.button || e.shiftKey || e.altKey || e.detail != 1) return;

            var a = e.originalTarget.closest("a[href]");
            if (!a || a.href.startsWith("javascript:")) return;

            this.ctrl = e.ctrlKey;
            this.initLongPress(a);
        } else {
            if (e.type == "click" && !this.link) e.preventDefault();
            this.destroyLongPress();
        }
    },
    get timer() {
        delete this.timer;
        return this.timer = Cc["@mozilla.org/timer;1"]
            .createInstance(Ci.nsITimer);
    },
    notify() {
        sendSyncMessage("%MR%", [this.link.href, this.link.ownerDocument.URL, this.ctrl]);
        this.link = null;
        if (!%BG%) this.destroyLongPress();
    },
    initLongPress(a) {
        addEventListener("click", this, true);
        addEventListener("dragstart", this, false);
        this.timer.initWithCallback(this, %DL%, this.timer.TYPE_ONE_SHOT);
        this.link = a;
    },
    destroyLongPress() {
        removeEventListener("click", this, true);
        removeEventListener("dragstart", this, false);
        this.link && this.timer.cancel();
        this.link = null;
    }
}).init();`);

В целом работает нормально, но в многопроцессорном режиме проявляется небольшой глюк.


Наводим курсор на ссылку, он принимает вид ладошки. Делаем длинный клик, открывается страница в новой вкладке, но курсор не меняет свой вид, так и остается в виде ладошки.
Чтобы курсор вернулся в исходное состояние, его надо увести за пределы окна, либо навести на одну из панелей браузера. В однопроцессорном режиме такого нет, всё работает как надо.


Не могу понять, это какой-то мой локальный глюк или проблема всё-таки в коде?

P.S. Версия [firefox] 77.0.1

Отредактировано unter_officer (24-06-2020 03:22:17)


«The Truth Is Out There»

Отсутствует

 

№1475624-06-2020 09:25:14

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

Re: Custom Buttons

unter_officer пишет

Не могу понять, это какой-то мой локальный глюк или проблема всё-таки в коде?
P.S. Версия [firefox] 77.0.1

Глюку сто лет, однако, похоже, исчезнет в Firefox 78
(читай - через неделю, а RC build1 доступен уже сейчас),
но лучше использовать расширение или WebExtensions.

Отсутствует

 

№1475724-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","");

Отсутствует

 

№1475824-06-2020 14:02:39

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
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)

Отсутствует

 

№1475924-06-2020 14:27:52

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 596
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»

Отсутствует

 

№1476024-06-2020 14:45:37

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

Re: Custom Buttons

unter_officer пишет

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

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

Отсутствует

 

№1476124-06-2020 15:11:42

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

Re: Custom Buttons

Vitaliy V. пишет

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

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


«The Truth Is Out There»

Отсутствует

 

№1476224-06-2020 22:18:09

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
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

Отсутствует

 

№1476324-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;";

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

Отсутствует

 

№1476425-06-2020 15:15:12

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

Re: Custom Buttons

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

Отсутствует

 

№1476525-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") );

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

Отсутствует

 

№1476626-06-2020 00:26:30

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

Re: Custom Buttons

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

Отсутствует

 

№1476726-06-2020 01:37:18

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 596
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»

Отсутствует

 

№1476826-06-2020 09:41:56

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
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)

Отсутствует

 

№1476926-06-2020 12:12:05

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

Re: Custom Buttons

Dumby пишет

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

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


«The Truth Is Out There»

Отсутствует

 

№1477026-06-2020 12:22:45

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

Re: Custom Buttons

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

Отсутствует

 

№1477126-06-2020 12:47:24

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 596
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»

Отсутствует

 

№1477226-06-2020 14:54:21

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

Re: Custom Buttons

Dumby пишет

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

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

Отсутствует

 

№1477326-06-2020 18:31:57

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
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);

Отсутствует

 

№1477426-06-2020 18:49:15

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 596
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»

Отсутствует

 

№1477526-06-2020 19:35:25

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

Re: Custom Buttons

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

Отсутствует

 

Board footer

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