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

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

№1485103-07-2020 18:11:07

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 539
UA: unknown 0.0

Re: Custom Buttons

Dumby
Согласен. новая dll тоже гуд. в ini надо было дописать кое-что. Но...после рестарта падают настройки ublock ? как минимум две и фильтры не всегда срабатывают . Боюсь не только ublock. При моей фишке этого не происходит(через bat/vbs)...
Нужна помощь на этот код ...На "отмена" - надо отменить код в ini-    this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 3) ? 0 : 3); т.е -на 0 выставить.

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

/*CODE*/
if (custombuttons.confirmBox(null, "Перезапустить с восстановлением вкладок ?", "Да", "Отмена") ) {
   
   
     var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
         file.initWithPath(file.path + "\\memreduct\\fox.vbs");
file.launch(); 
       
}

код в ini
скрытый текст

Выделить код

Код:

/*Initialization Code*/

(ps => {
    var s = "browser.startup.page";

    this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 3) ? 0 : 3);

    
})(Services.prefs);


this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };  
this.tooltipText= "ЛКМ: Рестарт";
  
;

Отредактировано solombala (04-07-2020 21:28:39)


Загрми Дража војвода,бацајте бомбе, четници!

Отсутствует

 

№1485209-07-2020 01:19:38

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

Re: Custom Buttons

Dumby.
Можно ли добавить в эту кнопку возможность восстановления выбранной сессии (из ранее сохраненных) при открытии браузера.

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

Выделить код

Код:

/*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);
}


// Функции "prompt", "alert" и "confirm" от Dumby .....
// https://forum.mozilla-russia.org/viewtopic.php?pid=782149#p782149 .....
// https://forum.mozilla-russia.org/viewtopic.php?pid=782181#p782181 .....
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;
}
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);


// Сохранение сессий .....
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);
}

Отредактировано unter_officer (09-07-2020 01:22:09)

Отсутствует

 

№1485309-07-2020 21:10:28

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

Re: Custom Buttons

solombala пишет

Нужна помощь на этот код ...На "отмена" - надо отменить код в ini-    this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 3) ? 0 : 3); т.е -на 0 выставить.

Не смог понять зачем держать такой «код в ini», если «На "отмена" - надо отменить».
Но раз «на 0 выставить» — так выстави, просто допиши в Код
else Services.prefs.setIntPref("browser.startup.page", 0);


unter_officer пишет

Можно ли добавить в эту кнопку возможность восстановления выбранной сессии (из ранее сохраненных) при открытии браузера.

Вот прям при открытии, ну разве что на выходе подменить.
Выбор сессии — двойной ЛКМ по соответствующему пункту.
Код добавить в конец.

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

Выделить код

Код:

((g, id, pref, {obs, prefs, ww, dirsvc}, style) => {
	var popup = scs.parentNode;
	addEventListener("dblclick", g[id] || (g[id] = {
		get name() {
			return prefs.getStringPref(pref, null);
		},
		init() {
			obs.addObserver(this, "quit-application", false);
			prefs.addObserver(pref, this.upd = () => {
				var {name} = this;
				for(var win of ww.getWindowEnumerator("navigator:browser")) 
					win.toolbar.visible && this.updPopup(win, name);
				this.oldName = null;
			});
			var st = new Image().style;
			st.cssText = style;
			this.style = st.cssText;
			this.handleMuts = this.handleMuts.bind(this);
			return this;
		},
		destroy(reason) {
			delete g[id];
			obs.removeObserver(this, "quit-application");
			prefs.removeObserver(pref, this.upd);
			reason == "delete" && prefs.clearUserPref(pref);
		},
		observe(s, t, data) {
			this.destroy();
			if (data.includes("restart")) return;
			var {name} = this;
			if (name == null) return;
			var file = dirsvc.get("UChrm", Ci.nsIFile);
			file.append("simple_session_manager.json");
			var state;
			try {state = JSON.parse(Cu.readUTF8File(file))[name];} catch {}
			if (!state) return prefs.clearUserPref(pref);

			g.SessionStoreInternal.getCurrentState = () => state;
			prefs.setBoolPref("browser.sessionstore.resume_session_once", true);
		},
		handleEvent(e) {
			if (!e.button && e.target.nodeName == "menu")
				e.target.label == this.name
					? prefs.clearUserPref(pref)
					: prefs.setStringPref(pref, e.target.label);
		},
		oldName: null,
		updPopup(win, name = this.name) {
			var {style} = this, popup = win.document.getElementById("ssm_menupopup");
			if (popup) for(var menu of popup.getElementsByTagName("menu"))
				if (
					this.oldName != null && menu.label == this.oldName
					&& !void(menu.label = name) || menu.label == name
				)
					menu.style.cssText += style;
				else {
					var css = menu.style.cssText;
					if (css == style) menu.removeAttribute("style");
					else if (css.includes(style))
						menu.style.cssText = css.replace(style, "");
				}
		},
		opts: {
			attributes: true, attributeOldValue: true,
			attributeFilter: ["style", "label"], subtree: true
		},
		handleMuts(muts) {
			if(!muts[0].target.matches(":-moz-window-inactive")) for(var mut of muts)
				if (mut.attributeName == "label" && mut.oldValue == this.name)
					this.oldName = this.name,
					prefs.setStringPref(pref, mut.target.label);
				else if (mut.attributeName == "style" && mut.oldValue == this.style) {
					var css = mut.target.style.cssText;
					css && css != this.style && prefs.clearUserPref(pref);
				}
		}
	}).init(), false, popup || 1);
	g[id].updPopup(window);
	var mo = new MutationObserver(g[id].handleMuts);
	mo.observe(popup, g[id].opts);
	addDestructor(reason => mo.disconnect(reason[5] == "e" && g[id]?.destroy(reason)));
})(
	Cu.import("resource:///modules/sessionstore/SessionStore.jsm", {}),
	"CBSSMQuitApplicationObserver", "CB.SSM.sessionToRestore",  Services,
	"font-weight: bold !important; color: red !important;"
);


А вообще, кнопка совершенно кривая, одноокошечная,
её нереально исправить, только переписать заново.

Отсутствует

 

№1485409-07-2020 21:25:33

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 539
UA: unknown 0.0

Re: Custom Buttons

Dumby
Лажа какая-то... else Services.prefs.setIntPref("browser.startup.page", 0);   Куда это ? Предупредиловка пропадает и толку - ноль...
Это код

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

Выделить код

Код:

if (custombuttons.confirmBox(null, "Перезапустить с восстановлением вкладок ?", "Да", "Отмена") ) {
	 var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
         file.initWithPath(file.path + "\\memreduct\\fox.vbs");
file.launch();  
   
}


Это ini
скрытый текст

Выделить код

Код:

(ps => {
    var s = "browser.startup.page";

    this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 3) ? 0 : 3);
    
    
})(Services.prefs);

   

this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };  

this.tooltipText= "ЛКМ: Рестарт";
  
;


Загрми Дража војвода,бацајте бомбе, четници!

Отсутствует

 

№1485509-07-2020 22:15:36

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

Re: Custom Buttons

solombala пишет

else Services.prefs.setIntPref("browser.startup.page", 0);   Куда это ?

Это в код (не в ini), после закрывающей скобки от if
(то есть в конец).
Уж наверно конструкцию if else не первый раз видишь.

Отсутствует

 

№1485609-07-2020 22:27:08

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 539
UA: unknown 0.0

Re: Custom Buttons

Dumby
Та ну на... Не фига...В самый конец? Теперь да...Класс! Кстати, этот гнусный ютуб в 78 сходу видео запускает в текущей вкладке...или это мой косяк? Медиа на 5 стоит...

Отредактировано solombala (09-07-2020 22:54:50)


Загрми Дража војвода,бацајте бомбе, четници!

Отсутствует

 

№1485710-07-2020 00:04:37

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

Re: Custom Buttons

Dumby пишет

Вот прям при открытии, ну разве что на выходе подменить.
Выбор сессии — двойной ЛКМ по соответствующему пункту.
Код добавить в конец.

Спасибо большое!


Dumby пишет

А вообще, кнопка совершенно кривая, одноокошечная,
её нереально исправить, только переписать заново.

Если Вам не трудно, и если найдете время, то перепишите пожалуйста.

Отсутствует

 

№1485813-07-2020 05:57:40

sibirnik
Участник
 
Группа: Members
Зарегистрирован: 11-08-2016
Сообщений: 32
UA: unknown 0.0

Re: Custom Buttons

Подскажите пожалуйста (в шапке все ссылки не рабочие) этот аддон ещё работает и если да, то где скачать? И на новых версиях(у меня 68.0.2) это работает?, если нет, то на какой версии - это работает?

Отсутствует

 

№1485913-07-2020 08:15:09

momo2000
Участник
 
Группа: Members
Зарегистрирован: 03-09-2015
Сообщений: 82
UA: Firefox 68.0

Re: Custom Buttons

sibirnik
Последняя версия CB, лучше paxmod (как по мне)
https://forum.mozilla-russia.org/viewto … 38#p782238

это конфиги (в папку ff, где firefox.exe)
https://www.upload.ee/files/11888164/signed.7z.html

А чтобы всё заработало надо удалить из папки профиля папку startupCache.

Всё это работает точно как часы с 68 до 77

Отредактировано momo2000 (13-07-2020 08:16:19)

Отсутствует

 

№1486013-07-2020 08:32:34

sibirnik
Участник
 
Группа: Members
Зарегистрирован: 11-08-2016
Сообщений: 32
UA: unknown 0.0

Re: Custom Buttons

momo2000

momo2000 пишет

Всё это работает точно как часы с 68 до 77

Попробую. Спасибо.

Отсутствует

 

№1486117-07-2020 11:23:31

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 259
UA: unknown 0.0

Re: Custom Buttons

Dumby
У меня с 79 перестал этот код срабатывать (для однопроцессорного режима)

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

Выделить код

Код:

setTimeout(()=> { 
   var promise = AddonManager.getAddonsByTypes(["extension"]);
      promise.then(addons=> {
         addons.forEach(addon=> { 
            if ( addon.name == "Right Links WE" ) {
                 addon.softDisabled = true;
                 setTimeout(()=> addon.softDisabled = false, 200);
                 }
                                                    
         });
      });
}, 200);


Можно починить?

Отредактировано Garalf (17-07-2020 11:40:11)

Отсутствует

 

№1486217-07-2020 11:46:41

vending_machine
Участник
 
Группа: Members
Зарегистрирован: 10-01-2020
Сообщений: 242
UA: unknown 0.0

Re: Custom Buttons

Garalf
Кардинальное  решение для многопроцессного, сводит потребление к однопроцессному.
https://forum.mozilla-russia.org/viewto … 36#p782936

Отредактировано vending_machine (17-07-2020 11:48:05)

Отсутствует

 

№1486317-07-2020 14:56:56

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 259
UA: unknown 0.0

Re: Custom Buttons

vending_machine
Спасибо! Действительно, облегчает работу.

Отсутствует

 

№1486417-07-2020 19:42:02

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

Re: Custom Buttons

Garalf пишет

У меня с 79 перестал этот код срабатывать

Выделить код

Код:

addon.softDisabled =

https://hg.mozilla.org/mozilla-central/rev/116a28847684

Отсутствует

 

№1486519-07-2020 20:17:49

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 161
UA: unknown 0.0

Re: Custom Buttons

Dumby
Посмотри, пожалуйста, что можно сделать с этим кодом "Активация вкладки наведением курсора" в 78, в 68 работает безукоризненно, как uc.js [спасибо bunda1, https://forum.mozilla-russia.org/viewto … 06#p557706]

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

Выделить код

Код:

(function() {
var tab_hover={
   event:null,
   tid:null,
 
   onLoad: function() {
      gBrowser.tabContainer.addEventListener("mouseout", tab_hover.onMouseOut, false);
      gBrowser.tabContainer.addEventListener("mouseover", tab_hover.onMouseOver, false);
   },
   onUnload: function() {
      gBrowser.tabContainer.removeEventListener("mouseover", tab_hover.onMouseOver, false);
      gBrowser.tabContainer.removeEventListener("mouseout", tab_hover.onMouseOut, false);
   },
 
   onMouseOver: function(event) {
      tab_hover.event=event.target;
      tab_hover.tid=setTimeout( function(){ gBrowser.selectedTab=tab_hover.event;   } , 200);
   },
   onMouseOut: function() {
      clearTimeout(tab_hover.tid);
   }
};
if (!this.tab_hoverRun) tab_hover.onLoad();
this.tab_hoverRun = true;
})();


А в 78, куда я его только не пытался воткнуть :), ибо ни бум-бум, не хочет. Распаковал user_chrome_files и в custom_script_all_win после строки "// Здесь может быть ваш код...." поместил вот такой кусочек (см. ниже), вроде заработало, но поведение более чем странное: если курсор вести горизонтально, то активация случается через таб (т.е. 2-я условная станет активной, когда курсор уже на 3-й и т.д.), а чтобы последовательно они открывались, вынужден делать пилообразные жесты, проходя сквозь таб (либо сверху вниз, затем снизу, либо постоянно сверху). Прошу прощения за сумбурность
скрытый текст

Выделить код

Код:

(function () { 
   var menubar = document.getElementById('toolbar-menubar');

   addEventListener("mouseover", function(e) {
      if ( menubar.getAttribute("autohide") == 'true' && menubar.getAttribute("inactive") ) {
           gBrowser.selectedTab = e.target;
           }        
   }, false, gBrowser.tabContainer ); 
})();

Отредактировано bezuma (20-07-2020 11:02:31)

Отсутствует

 

№1486619-07-2020 23:37:04

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

Re: Custom Buttons

bezuma пишет

А в 78, куда я его только не пытался воткнуть :), ибо ни бум-бум, не хочет.

Ну, в 68 вкладки конструировались через XBL,
и event.target события "mouseover" был, собственно, сам <tab>


А в 78 вкладки конструируются через кустомэлементщину,
и event.target события "mouseover" будет, в большинстве случаев,
одним из элементов их дочернего добра.


Вобщем, раз говоришь «в 68 работает безукоризненно», тогда вот такая правка.
И нет, когда подправишь, не размещай в custom_script_all_win,
размещай, после такой же упомянутой строки, но только в custom_script_win.js

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

Выделить код

Код:

/*
   onMouseOver: function(event) {
      tab_hover.event=event.target;
      tab_hover.tid=setTimeout( function(){ gBrowser.selectedTab=tab_hover.event;   } , 200);
   },
*/
   onMouseOver: e => tab_hover.tid = setTimeout(tab_hover.activate, 200, e.target),
   activate: trg => gBrowser.selectedTab = trg.closest("tab"),

Отсутствует

 

№1486720-07-2020 00:03:54

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 161
UA: unknown 0.0

Re: Custom Buttons

Dumby
Я знал, что ты колдун! Awesome! :beer: конечно же, custom_script_win.js, попутал при копипасте, волновался маленько. Творческих успехов

Отсутствует

 

№1486820-07-2020 03:41:09

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2768
UA: unknown 0.0

Re: Custom Buttons

Dumby пишет

Вобщем, раз говоришь «в 68 работает безукоризненно», тогда вот такая правка.
И нет, когда подправишь, не размещай в custom_script_all_win,
размещай, после такой же упомянутой строки, но только в custom_script_win.js

Спасибо. А в отдельные файлы здесь скрипты можно помещать?

Отсутствует

 

№1486920-07-2020 21:24:04

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

Re: Custom Buttons

voqabuhe пишет

А в отдельные файлы здесь скрипты можно помещать?

Будь уверен.
https://forum.mozilla-russia.org/viewtopic.php?pid=776177#p776177

Отсутствует

 

№1487022-07-2020 10:38:18

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

Re: Custom Buttons

Dumby
ссылки кликабельны..а нельзя -всегда кликабельны?

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

Выделить код

Код:

gBrowser.selectedBrowser.messageManager.loadFrameScript(this.fsURL || (
    this.fsURL = `data:,(match => {\n${encodeURIComponent(this.Help)}\n})()`
), false);

Отредактировано solombala (23-07-2020 20:47:13)


Загрми Дража војвода,бацајте бомбе, четници!

Отсутствует

 

№1487122-07-2020 13:24:06

sonyas75
Участник
 
Группа: Members
Откуда: Ставрополь
Зарегистрирован: 22-03-2011
Сообщений: 403
UA: unknown 0.0

Re: Custom Buttons

здрасти! тут такая хотелка нарисовалась. есть кнопка "Создать кнопку ярлык для сайта в текущем табе", правда она не в текущем, а в новом открывает, но то такое.

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

Выделить код

Код:

/*CODE*/
// Иконка для создания кнопки ярлыка без значка веб-сайта .................
var defaultFavicon = "chrome://custombuttons/skin/stdicons/gbutton.png";


// Получить иконку сайта и запустить создание кнопки ярлыка .................
PlacesUtils.favicons.getFaviconDataForPage(
    gBrowser.currentURI,
    (uri, len, arr, mmt) => createButton(len
        ? `data:${mmt};base64,${btoa(String.fromCharCode(...arr))}`
        : defaultFavicon
    )
);

// Дублировать кнопку и установить для новый кнопки иконку, название и код .................
function createButton(favicon) {  
    custombuttons.cloneButton(self, true);

    var newButtonLink = custombuttons.makeButtonLink("update", self.nextSibling.id);
    var params = custombuttons.cbService.getButtonParameters(newButtonLink).wrappedJSObject;

    params.image = favicon;
    params.name = gBrowser.contentTitle.slice(0, 75);
    params.code = `gBrowser.selectedTab = gBrowser.addTrustedTab("${gBrowser.currentURI.spec}");`;

    custombuttons.cbService.installButton(params.wrappedJSObject = params);
}

хочу такую же кнопку, н̶о̶ ̶с̶ ̶п̶е̶р̶л̶а̶м̶у̶т̶р̶о̶в̶ы̶м̶и̶ ̶п̶у̶г̶о̶в̶и̶ц̶а̶м̶и̶ , чтобы она создавала ярлык, который открывал бы страницу в "личном" по дефолту контейнере. вотЪ :blush:

Отсутствует

 

№1487222-07-2020 13:51:13

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

Re: Custom Buttons

solombala пишет

а нельзя -всегда кликабельны?

Наверно можно, если обезьяний скрипт
использовать по назначению, то есть в обезьяне.


sonyas75 пишет

открывал бы страницу в "личном"

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

Выделить код

Код:

...
    //params.code = `gBrowser.selectedTab = gBrowser.addTrustedTab("${gBrowser.currentURI.spec}");`;
    params.code = `gBrowser.selectedTab = gBrowser.addTrustedTab("${gBrowser.currentURI.spec}", {userContextId: 1});`;

Отсутствует

 

№1487322-07-2020 13:56:33

sonyas75
Участник
 
Группа: Members
Откуда: Ставрополь
Зарегистрирован: 22-03-2011
Сообщений: 403
UA: unknown 0.0

Re: Custom Buttons

Dumby
сердечно благодарю! всё работает как надо :)

Отсутствует

 

№1487425-07-2020 13:58:57

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

Re: Custom Buttons

Уделал таки новую 79, классная вещь! Хороший релиз, такой скорости еще не видел.

Отредактировано solombala (27-07-2020 13:36:55)


Загрми Дража војвода,бацајте бомбе, четници!

Отсутствует

 

№1487527-07-2020 15:38:17

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

Re: Custom Buttons

«Merge Day»


custom_buttons-0.0.7.0.0.16-fx-paxmod.xpi
custom_buttons-0.0.7.0.0.16-fx-bootstrap.xpi

Отредактировано Dumby (27-07-2020 17:07:44)

Отсутствует

 

Board footer

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