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

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

№1690124-07-2023 04:53:03

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Firefox 100.0

Re: Custom Buttons

Приветствую. Можно кнопку Red Links https://forum.mozilla-russia.org/viewto … 26#p544526 адаптировать под FF 100?

Отсутствует

 

№1690224-07-2023 14:06:03

Oakwood
Участник
 
Группа: Members
Зарегистрирован: 01-01-2023
Сообщений: 15
UA: Firefox 108.0

Re: Custom Buttons

Dumby
Подскажите пожалуйста, что в коде не так? На FF108 W10 не работает, хотя на W8.1 работал? Даже ОС может влиять на функции браузера? Та же портабельная сборка от PortableApps.

Сохранение изображения по двойному ПКМ без запроса

Выделить код

Код:

addEventListener("contextmenu", {
	handleEvent(e) {
		if (e.detail != 2 || !gContextMenu?.onImage) return;

		var pl = "browser.download.folderList";
		var pu = "browser.download.useDownloadDir";

		var cl = Services.prefs.getIntPref(pl), sl = cl == 2;
		var cu = Services.prefs.getBoolPref(pu);

		sl || Services.prefs.setIntPref(pl, 2);
		cu || Services.prefs.setBoolPref(pu, true);
		try {
			this.save(); e.preventDefault(); this.hide();
		} finally {
			sl || Services.prefs.setIntPref(pl, cl);
			cu || Services.prefs.setBoolPref(pu, cu);
		}
	},
	get hide() {
		delete this.hide;
		var popup = document.getElementById("contentAreaContextMenu");
		return this.hide = popup.hidePopup.bind(popup);
	},
	get save() {
		var func = eval(`(function ${gContextMenu.saveMedia})`.replace(
			/^(        )(?:false, \/\/ don't)( skip prompt for where to save)/m, "$1true, //$2"
		));
		delete this.save;
		return this.save = () => func.call(gContextMenu);
	}
}, false, gBrowser.tabpanels || 1);

Отсутствует

 

№1690325-07-2023 07:47:07

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Firefox 100.0

Re: Custom Buttons

Кнопка "Отображать картинки" в FF100 работает, но кривовато (иконка не меняет вид при переключении).

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

Выделить код

Код:

this._handleClick =()=> BrowserReload( custombuttons.setPrefs(s, custombuttons.getPrefs(s) == 1 ? 2 : 1) );

var s = 'permissions.default.image';
function toggleImage() { 
   var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon");
   icon.src = custombuttons.getPrefs(s) == 1  
   ? self.image 
   : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC';
};
toggleImage();
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage) );


Может кто-нибудь исправит?

Отредактировано manuk (25-07-2023 16:52:17)

Отсутствует

 

№1690425-07-2023 08:09:16

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

Re: Custom Buttons

ВВП пишет

Это окно виндовское никак не раскрасить ?(w10)

@-moz-document url(chrome://global/content/commonDialog.xhtml) {
    :root {
        background-color: salmon !important;
    }
}
Или о чём речь?


manuk пишет

Можно кнопку Red Links https://forum.mozilla-russia.org/viewto … 26#p544526 адаптировать под FF 100?

Теоретически, не исключено. Но, казалось бы, все уже давно усвоили,
что «Links» в другом процессе, а с этим душниловом никто связываться не будет,
поэтому таких вопросов больше не задают.
Все, да, видимо, не все.


Oakwood пишет

На FF108 W10 не работает

Ух ты, я вижу это!
Можно попробовать перенести обработчик в окно

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

Выделить код

Код:

//}, false, gBrowser.tabpanels || 1);
});

Отсутствует

 

№1690525-07-2023 12:58:31

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

Re: Custom Buttons

manuk как вариант

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

Выделить код

Код:

var button = this;
const imgFalse="data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAASw8NZZYdGuubHhv/mh4b/poeG/+aHhv/mh4b/5oeG/+aHhv/mh4b/5oeG/+aHhv/mh4b/pseG/+WHRrrSw8NZQAAAABODw1oqSEd/58fG/6eHxv/nh8b/54fG/+eHxv/nh8b/54fG/+dHxv/nh8b/54fG/+eHxv/nh8b/54fG/+fHxv+qSEd/04PDWeeHhvjpB8c/6EfHP2iHxz/oh8c/6IfHP+iHxv/oh8b/6UgHf+lIB3/ox8c/6IfG/+iHxz/oh8c/6IfHP+hHxz9pB8c/54eG+OnIBz9ph8c/6cfHP+nHxz/px8c/6YfHP+pIB3/qSMg/50dGv+cHBn/pyIf/6ohHf+mHxz/px8c/6cfHP+nHxz/ph8c/6cgHP2rIBz+qyAc/6sgHP+rIBz/qiAc/68iHv+iHhr/cwMC/2sCAv9rAwP/bQEA/5obGP+vIh7/qiAc/6sgHP+rIBz/qyAc/6sgHP6vIBz/ryAc/68gHP+uIBz/syId/50bGP9pAAD/oGFg/+LMzP/kz8//p2xr/2gBAP+hHBn/tCMe/64gHP+vIBz/ryAc/68gHP+zIRz/syEc/7IhHP+1Ih3/qR8b/2cAAP+yfn3///////v8/P/7+/v//////7uMjP9rAAD/rB8a/7YjHf+yIRz/syEc/7MhHP+4IR3/uCEd/7chHf+/JiL/hwYE/51fX///////9fLy/6xPTf+iQ0L/7+np//////+2h4f/dwQD/7YiHv+3IR3/uCEd/7ghHf+8Ih3/vCId/7siHf/BJSD/hAkH/9jBwf//////mUlI/5MHA/9rAAD/iDc2/+/j4///////oWVk/6MPCv/IKiX/uiId/7wiHf/AIh3/wCId/78iHf/HJSD/lA4L/9XBwf//////kkRD/14AAP+8j47/3sXF/5xVVf/Ts7L/izc3/3kAAP+cEA3/xSQe/8AjHv/GIh3/xiId/8YiHf/JJiH/uBIO/6xkY///////+PHx/4w6Of/Ts7L//////+bT0/91Ghn/awsK/9nBwf+0ior/nAoG/84lIP/LIx3/yyMd/8sjHf/KIx3/0SYg/7IQC/+zfX3///////Pq6f+bVFP/38nJ///////p2dn/jTw7/+3e3v//////uomJ/6kMB//QIx3/0CMd/9AjHf/QIx3/zyMd/9gnIf+mCQX/q3l5///////QsLD/cQ4N/+LNzf//////487O/55XVv/y6Of//////8WVlP/VIx3+1SMd/9UjHf/VIx3/1SMd/9QkHf/bJh//qw4J/7xkYv+MNTT/bQYF/4o2Nv/dxMT//////658fP+CKir/+PLy//////7cIxz92iMc/9sjHP/bIxz/2yMc/9sjHP/ZIxz/5igg/8ETDv9gAAD/2r29//fy8f+aU1L/t3x8/7w7N/9mAAD/rHp6//////3aIhvj4SQc/98jHP3gIxz/4CMc/+AjHP/gIxz/3yMc/+EoIf+EBwX/rX5+///////u6un/njU0/4IAAP95ISD96tnZ//T39+NxEg5o9yce/+ckHP7kJBz/5SQc/+UkHP/lJBz/5CQc/+klHf/dIxz/cgAA/616ev//////8+3u/69/f//l09P+/////318fGcBAAAAcRINZeQjG+vsJBz/6iQc/uskHP/rJBz/6yQc/+kkHP/yJh7/0iEb/2cAAP+3hIT//////v/////39/fre3p6ZQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
const imgTrue = "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAWAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw1LZR0aluseG5v/Hhua/h4bmv8eG5r/Hhua/x4bmv8eG5r/Hhua/x4bmv8eG5r/Hhua/h4bm/8dGpbrDw1LZQAAAAAPDU5oIR2p/x8bn/4fG57/Hxue/x8bnv8fG57/Hxue/x8bnv8fG53/Hxue/x8bnv8fG57/Hxue/x8bnv8fG5/+IR2p/w8NTmceG57jHxyk/x8cof0fHKL/Hxyi/x8cov8fG6L/Hxui/yAdpf8gHaX/Hxyj/x8bov8fHKL/Hxyi/x8cov8fHKH9Hxyk/x4bnuMgHKf9Hxym/x8cp/8fHKf/Hxyn/x8cpv8gHan/IyCp/x0anf8cGZz/Ih+n/yEdqv8fHKb/Hxyn/x8cp/8fHKf/Hxym/yAcp/0gHKv+IByr/yAcq/8gHKv/IByq/yIer/8eGqL/AwJz/wICa/8DA2v/AQBt/xsYmv8iHq//IByq/yAcq/8gHKv/IByr/yAcq/4gHK//IByv/yAcr/8gHK7/Ih2z/xsYnf8AAGn/YWCg/8zM4v/Pz+T/bGun/wEAaP8cGaH/Ix60/yAcrv8gHK//IByv/yAcr/8hHLP/IRyz/yEcsv8iHbX/Hxup/wAAZ/9+fbL///////z8+//7+/v//////4yMu/8AAGv/Hxqs/yMdtv8hHLL/IRyz/yEcs/8hHbj/IR24/yEdt/8mIr//BgSH/19fnf//////8vL1/09NrP9DQqL/6env//////+Hh7b/BAN3/yIetv8hHbf/IR24/yEduP8iHbz/Ih28/yIdu/8lIMH/CQeE/8HB2P//////SUiZ/wcDk/8AAGv/NzaI/+Pj7///////ZWSh/w8Ko/8qJcj/Ih26/yIdvP8iHcD/Ih3A/yIdv/8lIMf/DguU/8HB1f//////REOS/wAAXv+Pjrz/xcXe/1VVnP+zstP/NzeL/wAAef8QDZz/JB7F/yMewP8iHcb/Ih3G/yIdxv8mIcn/Eg64/2RjrP//////8fH4/zo5jP+zstP//////9PT5v8aGXX/Cwpr/8HB2f+KirT/Cgac/yUgzv8jHcv/Ix3L/yMdy/8jHcr/JiDR/xALsv99fbP//////+rp8/9UU5v/ycnf///////Z2en/PDuN/97e7f//////iYm6/wwHqf8jHdD/Ix3Q/yMd0P8jHdD/Ix3P/ych2P8JBab/eXmr//////+wsND/Dg1x/83N4v//////zs7j/1dWnv/o5/L//////5WUxf8jHdX+Ix3V/yMd1f8jHdX/Ix3V/yQd1P8mH9v/Dgmr/2RivP81NIz/BgVt/zY2iv/ExN3//////3x8rv8qKoL/8vL4//////4jHNz9Ixza/yMc2/8jHNv/Ixzb/yMc2/8jHNn/KCDm/xMOwf8AAGD/vb3a//Lx9/9TUpr/fHy3/zs3vP8AAGb/enqs//////0iG9rjJBzh/yMc3/0jHOD/Ixzg/yMc4P8jHOD/Ixzf/ygh4f8HBYT/fn6t///////q6e7/NTSe/wAAgv8hIHn92dnq//f39OMSDnFoJx73/yQc5/4kHOT/JBzl/yQc5f8kHOX/JBzk/yUd6f8jHN3/AABy/3p6rf//////7e7z/39/r//T0+X+/////3x8fWcAAAEAEg1xZSMb5OskHOz/JBzq/iQc6/8kHOv/JBzr/yQc6f8mHvL/IRvS/wAAZ/+EhLf//////v/////39/frenp7ZQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
this.onclick = function(event) {
    if(event.button == 0) {
gBrowser.fixupAndLoadURIString(`javascript:(function(){var i,x; for (i=0;x=document.links[i];++i)x.style.color=["red","blue","green"][sim(x,location)]; function sim(a,b) { if (a.hostname!=b.hostname) return 0; if (fixPath(a.pathname)!=fixPath(b.pathname) || a.search!=b.search) return 1; return 2; } function fixPath(p){ p = (p.charAt(0)=="/" ? "" : "/") + p; } })()`, {
    triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});
    button.image = imgTrue;
    }
else  if(event.button == 1) { 
gBrowser.fixupAndLoadURIString(`javascript:(function(){var i,x; for (i=0;x=document.links[i];++i)x.style.color=["","",""][sim(x,location)]; function sim(a,b) { if (a.hostname!=b.hostname) return 0; if (fixPath(a.pathname)!=fixPath(b.pathname) || a.search!=b.search) return 1; return 2; } function fixPath(p){ p = (p.charAt(0)=="/" ? "" : "/") + p } })()`, {
    triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});
    button.image = imgFalse;
   }
};
this.tooltipText="ЛКМ - Подсветить ссылки:\n        красный - внешние сайты\n        голубой - внутри сайта\n        зеленый - внутри страницы\nСКМ - Вернуть исходный вид\nПКМ - Меню кнопки";

Отсутствует

 

№1690625-07-2023 13:29:51

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Firefox 100.0

Re: Custom Buttons

Andrey_Krropotkin, спасибо. Но не работает совсем... Даже иконки нет. FF 100.0.

Отредактировано manuk (25-07-2023 14:21:50)

Отсутствует

 

№1690725-07-2023 15:31:23

b0ttle
Участник
 
Группа: Members
Зарегистрирован: 22-10-2020
Сообщений: 182
UA: Firefox 115.0

Re: Custom Buttons

Oakwood
Что делает код?
// Поражаюсь с себя, как не прочитал спойлер. Мда. Еще и задал вопрос)

Отредактировано b0ttle (25-07-2023 15:42:21)

Отсутствует

 

№1690825-07-2023 15:34:33

Oakwood
Участник
 
Группа: Members
Зарегистрирован: 01-01-2023
Сообщений: 15
UA: Firefox 108.0

Re: Custom Buttons

Dumby пишет

Ух ты, я вижу это!
Можно попробовать перенести обработчик в окно

Спасибо огромное! :)


manuk
Попробуйте эту кнопку от Dumby, очень удобно.

Сохранение изображения по двойному ПКМ без запроса

Выделить код

Код:

addEventListener("contextmenu", {
	handleEvent(e) {
		if (e.detail != 2 || !gContextMenu?.onImage) return;

		var pl = "browser.download.folderList";
		var pu = "browser.download.useDownloadDir";

		var cl = Services.prefs.getIntPref(pl), sl = cl == 2;
		var cu = Services.prefs.getBoolPref(pu);

		sl || Services.prefs.setIntPref(pl, 2);
		cu || Services.prefs.setBoolPref(pu, true);
		try {
			this.save(); e.preventDefault(); this.hide();
		} finally {
			sl || Services.prefs.setIntPref(pl, cl);
			cu || Services.prefs.setBoolPref(pu, cu);
		}
	},
	get hide() {
		delete this.hide;
		var popup = document.getElementById("contentAreaContextMenu");
		return this.hide = popup.hidePopup.bind(popup);
	},
	get save() {
		var func = eval(`(function ${gContextMenu.saveMedia})`.replace(
			/^(        )(?:false, \/\/ don't)( skip prompt for where to save)/m, "$1true, //$2"
		));
		delete this.save;
		return this.save = () => func.call(gContextMenu);
	}
//}, false, gBrowser.tabpanels || 1);
});


b0ttle
Сохранение изображения по двойному ПКМ на нём без запроса.

Отсутствует

 

№1690925-07-2023 15:38:33

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Firefox 100.0

Re: Custom Buttons

Oakwood, мне не сохранять картинки нужно, а кнопкой отключать-включать их показ на страницах сайтов. (permissions.default.image)

Отсутствует

 

№1691025-07-2023 17:25:33

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

Re: Custom Buttons

manuk пишет

мне не сохранять картинки нужно, а кнопкой отключать-включать их показ на страницах сайтов. (permissions.default.image)

Когда-то делал себе на FF91, но потом за невостребованностью удалил.
Попробуйте, может будет работать на FF100.

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

Выделить код

Код:

/*Initialization Code*/

self.image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAB4SURBVHjaYvz//z8DDChknUFwcIAH00wYkfmM6AasnWaCVWNw1hmshrBgU7z2yg+shoAMBxkEsghmCBMDiQDmQph3WUjRjOwNvF7ABqKydBAG6XDADSPZC+iALAN+/qbQAIpdMGoAEQkJlFAIRR9OA7AlV3wAIMAAiooo6Ya47z0AAAAASUVORK5CYII=";

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

	this.onmouseup =e=> { // левый клик
		if (e.button) return;

		switch(cbu.getPrefs("permissions.default.image")) {
			case 0:  var data = 1; break;
			case 1:  var data = 2; break;
			default: var data = 1;
		}
		cbu.setPrefs("permissions.default.image", data);
	}

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

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


// Подсказка для кнопки .....
this.onmouseover =()=> {
	if (cbu.getPrefs("permissions.default.image") == 1) { statusPrefs = "Показ включен"; }
	else { statusPrefs = "Показ выключен"; }
	this.tooltipText = "Вкл/Откл показ картинок на страницах сайтов \nЛКМ:  Вкл/Откл картинки \nПКМ:  CB меню \n----------------------------------------------\nТекущее состояние: " + statusPrefs;
}


// Установливать нужную иконку кнопки при старте баузера или при изменениях в 'about:config' .....
var s = "permissions.default.image";
function toggleImage() {
	var icon = self.getElementsByClassName("toolbarbutton-icon")[0];
	switch( cbu.getPrefs(s)) {
		case 1: icon.src = self.image; break;
		case 2: icon.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAB1SURBVHjaYvz//z8DDJSVlSE4OEBXVxcjMp8FXUFBQQFWjRMmTIBbgmwIEzbFly9fxsDIhiO7lImBRIBuCAspmmHewBsGuICzszOcraurCzeMZC+gA7IM+Pv3L2UGUOyCUQOISEighEIo+nAagC254gMAAQYARzQuu5rDO0MAAAAASUVORK5CYII='; break;
		default:icon.src = self.image;
	}
}
toggleImage();
var gPrefService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
gPrefService.addObserver(s, toggleImage, false);
addDestructor(()=> gPrefService.removeObserver(s, toggleImage));


«The Truth Is Out There»

Отсутствует

 

№1691125-07-2023 17:48:41

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Chrome 102.0

Re: Custom Buttons

unter_officer, спасибо. С помощью части вашего кода удалось исправить старую кнопку.

Отсутствует

 

№1691225-07-2023 21:19:55

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

Re: Custom Buttons

manuk все работает перезагрузи браузер

Отсутствует

 

№1691325-07-2023 21:48:21

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Chrome 102.0

Re: Custom Buttons

Andrey_Krropotkin, действительно работает. На версиях FF от 102. На FF 100 не работает, к сожалению.

Отредактировано manuk (25-07-2023 23:01:02)

Отсутствует

 

№1691425-07-2023 23:32:04

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

Re: Custom Buttons

manuk посмотри пост https://forum.mozilla-russia.org/viewtopic.php?pid=804278#p804278 и все поймешь и на сотке заработает. На старших версиях - заменить loadURI на fixupAndLoadURIString, а ты обратно поменяй местами

Отсутствует

 

№1691525-07-2023 23:34:18

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Chrome 102.0

Re: Custom Buttons

Andrey_Krropotkin, понял. Заменил. Работает. Спасибо большое! А можно сделать, чтобы все страницы сразу грузились с настроенными цветами без клика по кнопке?

Отредактировано manuk (25-07-2023 23:52:07)

Отсутствует

 

№1691626-07-2023 01:04:14

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

Re: Custom Buttons

manuk нет, каждая вкладка отдельный процесс

Отсутствует

 

№1691726-07-2023 03:19:18

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1647
UA: Firefox 115.0

Re: Custom Buttons

Andrey_Krropotkin пишет

заменить loadURI на fixupAndLoadURIString

Это везде или только для данного скрипта? Просто нашел у себя в одном скрипте, но разницы не вижу, возможно неиспользуемый мной функционал.
   

Andrey_Krropotkin пишет

иначе не работало

ОК, посмотрю.

Отредактировано _zt (27-07-2023 01:56:10)

Отсутствует

 

№1691826-07-2023 08:02:40

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

Re: Custom Buttons

_zt я везде заменял, иначе не работало

Отсутствует

 

№1691928-07-2023 13:58:47

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 337
UA: Chrome 116.0

Re: Custom Buttons

Dumby

Dumby пишет

@-moz-document url(chrome://global/content/commonDialog.xhtml) {
    :root {
        background-color: salmon !important;
    }
}

Не того...Display: none -реагирует , на окрас - нет. Заголовок окна,имею ввиду.

Отсутствует

 

№1692028-07-2023 15:47:27

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

Re: Custom Buttons

ВВП пишет

.Display: none -реагирует , на окрас - нет.

Хмм, с чего бы.

Заголовок окна,имею ввиду.

Заголовок окна — это non-client area,
он нам не подконтролен, увы.

Отсутствует

 

№1692131-07-2023 20:29:00

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

Re: Custom Buttons

Отсутствует

 

№1692202-08-2023 19:41:00

Deriax
Участник
 
Группа: Members
Зарегистрирован: 27-03-2021
Сообщений: 37
UA: Yandex 23

Re: Custom Buttons

Пожалуйста, помогите мне с решением.

Я хочу заменить mainWindow.gBrowser.addTab("https://vk.com/") на element.click().

То что у меня есть сейчас (когда выполняю в window.console.log ниже строку из кода, то получаю [object XULElement]):

mainWindow.gBrowser.addTab("https://vk.com/")

А мне нужно что-то вроде (см. ниже, знаю что неверно, но суть понятна)... перейти по ссылке со стороннего сайта, на сайт вк через клик, но чтобы функционал соответствовал mainWindow.gBrowser.addTab("https://vk.com/"), то есть я получал в window.console.log ответ в виде [object XULElement].

window.document.querySelector('селектор').click()

Отредактировано Deriax (02-08-2023 22:52:03)

Отсутствует

 

№1692302-08-2023 21:34:25

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

Re: Custom Buttons

Перешел на 116, в кнопке

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

Выделить код

Код:

/*Initialization Code*/
({
	title: "Консоль браузера",
  url: "chrome://devtools/content/webconsole/index.html",

	icon: "chrome://devtools/skin/images/tool-webconsole.svg",
	init() {
		var trg = document.getElementById("browser");
		trg && addEventListener("DOMContentLoaded", this, false, trg);
		var id = "viewBrowserConsoleSidebar";

		var menuitem = this.element("menuitem", {
			type: "checkbox",
			label: this.title,
			id: "menu_browserConsoleSidebar",
			oncommand: `SidebarUI.toggle("${id}");`
		}, document.getElementById("viewSidebarMenu"));

		var btn = this.element("toolbarbutton", {
			type: "checkbox",
			label: this.title,
			id: "sidebar-switcher-browserConsole",
			oncommand: `SidebarUI.show("${id}");`,
			class: "subviewbutton subviewbutton-iconic"
		});
		document.querySelector(
			'toolbarbutton[id^="sidebar-switcher-"] + toolbarseparator'
		).before(btn);

		SidebarUI.sidebars.set(id, {
			url: this.url,
			buttonId: btn.id,
			title: this.title,
			menuId: menuitem.id
		});
		SidebarUI.isOpen && SidebarUI.currentID == id && SidebarUI.selectMenuItem(id);

		var popupset = this.popupset = this.element("popupset", {
			id: `CB${_id.slice(20)}-browserConsole-popupset`
		}, document.documentElement);

		var css = `\
			#${btn.id} > .toolbarbutton-icon,
			#sidebar-box[sidebarcommand="${id}"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
				list-style-image: url(${this.icon});
			}`;
		var str = (cbu.cb || "") + "data:text/css," + encodeURIComponent(css), type = windowUtils.USER_SHEET;
		windowUtils.loadSheetUsingURIString(str, type);

		addDestructor(() => {
			SidebarUI.sidebars.delete(id);
			btn.remove(); menuitem.remove(); popupset.remove();
			windowUtils.removeSheetUsingURIString(str, type);
		});
		parseInt(Services.appinfo.platformVersion) < 73 
			&& "insertFTLIfNeeded" in MozXULElement
			&& MozXULElement.insertFTLIfNeeded("toolkit/main-window/editmenu.ftl");

		self.onclick = e => {
			if (e.button == 2) return;
			if (!e.button && !e.shiftKey) return SidebarUI.toggle(id);
			var st = gBrowser.selectedTab, tab;
			if (!e.ctrlKey) tab = gBrowser.visibleTabs.find(tab => {
				var br = gBrowser.getBrowserForTab(tab);
				return br.currentURI.spec == this.url || (
					"_cachedCurrentURI" in br
					&& br._cachedCurrentURI.spec == this.url
				)
			});
			if (tab == st) return;
			if (!tab) tab = gBrowser.addTrustedTab(this.url);
			gBrowser.moveTabTo(tab, st._tPos + 1);
			gBrowser.selectedTab = tab;
		}
		for(var br of gBrowser.browsers) {
			if (br.currentURI.spec != this.url) continue;
			var doc = br.contentDocument;
			if (doc && (
				doc.readyState == "complete" ||
				doc.readyState == "interactive"
			))
				doc.querySelector(
					"main#app-wrapper,div#output-container"
				).childElementCount
					? this.defineDocPopupset(doc)
					: this.handleEvent({target: doc});
		}
		if (!btn.hasAttribute("checked")) return;
		var doc = SidebarUI.browser.contentDocument;
		if (doc.documentURI != this.url) btn.doCommand();
		else if (doc.readyState == "complete") this.defineDocPopupset(doc);
	},
	defineDocPopupset(doc) {
		this.definePopupset(
			doc.querySelector("popupset") ||
			doc.documentElement.appendChild(doc.createXULElement("popupset"))
		);
	},
	get definePopupset() {
		var append = customElements.get("menuitem")
			? popup => {
				this.popupset.appendChild(popup);
				popup.setAttribute("oncommand", "event.target.cmd()");
				for(var node of [...popup.querySelectorAll("menuitem")]) {
					var menuitem = document.importNode(node, true);
					menuitem.cmd = Services.els.getListenerInfoFor(node)
						.find(inf => inf.type == "command").listenerObject;
					popup.replaceChild(menuitem, node);
				}
				return popup;
			}
			: this.popupset.appendChild.bind(this.popupset);

		delete this.definePopupset;
		return this.definePopupset = popupset => popupset.appendChild = append;
	},
	lss: Services.scriptloader.loadSubScript,
	async handleEvent({target: doc}) {
		if (!doc || doc.documentURI != this.url) return;

		var win = doc.defaultView;
		if (
			win.docShell.name == "toolbox-panel-iframe-webconsole" ||
			doc.DOMContentLoadedEventHandled
		)
			return;
		doc.DOMContentLoadedEventHandled = true;
		"custombuttonsConsole" in win || this.lss(
			"chrome://custombuttons/content/consoleOverlay.js", win
		);
		var cw = win.isChromeWindow, bc;
		if (!cw) {
			if (doc.visibilityState == "hidden") {
				var {focus} = win;
				win.focus = () => win.focus = focus;
			}
			doc.title = this.title;
			var link = doc.createElement("link");
			link.setAttribute("rel", "shortcut icon");
			link.setAttribute("href", this.icon);
			doc.head.prepend(link);

			var br = win.docShell.chromeEventHandler;
			var cmAttr = br.getAttribute("contextmenu");
			cmAttr && br.removeAttribute("contextmenu");
			win.onbeforeunload = () => {
				if (bc) bc.chromeWindow = {close() {}};
				cmAttr && br.setAttribute("contextmenu", cmAttr);
			}
		}
		bc = await this.console(win);
	},
	get console() {
		// Bug 1579090 - WebConsole should handle ObjectFront when needed (for non-primitive Console API args + Evaluation results) (Firefox 73+)
		https://bugzilla.mozilla.org/show_bug.cgi?id=1579090
		var vers = parseInt(Services.appinfo.platformVersion);
		this.bug1579090 = vers > 73 || (vers == 73 && !(
			"_setCurrentURI" in gBrowser.selectedBrowser // https://bugzil.la/1431214
		));
		delete this.console;
		return this.console = this.bug1579090 ? async win => {
			//await this.loader.bcm._browserConsoleInitializing;
			var key = "CBBrowserConsolePromise", {wins} = this.loader;
			win[key] = win.Object.create(null);
			win[key].promise = new win.Promise(resolve => win[key].resolve = resolve);
			win[key].destroy = () => {
				win[key].resolve();
				delete win[key];
				wins.splice(wins.indexOf(win), 1);
			}
			wins.unshift(win);
			wins.length > 1 && await wins[1][key].promise;

			var bc = await new this.loader.console(win).toggleBrowserConsole();
			win[key].destroy();
			return bc;

		} : async win => {
			this.loader.Services.ww.wins.push(win);
			return await new this.loader.HUDService().toggleBrowserConsole();
		}
	},
	get loader() {
		delete this.loader;
		// var url = "resource://devtools/shared/Loader.jsm";
		var url, pver = parseInt(Services.appinfo.platformVersion);
		if  (pver < 98)
			url = "resource://devtools/shared/Loader.jsm";
		else
			url=  "resource://devtools/shared/loader/Loader.jsm";
		if (this.bug1579090) {
			var g = Cu.import(url, {}), key = "CBBrowserConsoleLoader";
			addDestructor(reason => reason[5] == e && key in g && g[key].destroy());
			if (key in g) return this.loader = g[key];
			var {BrowserConsoleManager} = g.require(
				"devtools/client/webconsole/browser-console-manager"
			);
			return this.loader = g[key] = {
				wins: [],
				bcm: BrowserConsoleManager,
				console: class extends BrowserConsoleManager.constructor {
					constructor(win) {
						super();
						this.win = win;
					}
					openWindow() {
						var {win} = this;
						win.addEventListener("unload", () => {
							win.CBBrowserConsolePromise &&
								win.CBBrowserConsolePromise.destroy();
							this.closeBrowserConsole.call(this);
						}, {once: true});
						delete this.win;
						return win;
					}
				},
				destroy() {
					this.wins = null;
					delete g[key];
				}
			};
		}
		var id = _id + "-browser-console";
		url += "?" + id;
		var loader = {exports: {}}, nsvo = Cu.import(url, loader);
		addDestructor(reason => reason[5] == "e" && Cu.unload(url));

		if (id in nsvo) return this.loader = nsvo[id];

		var dir = "resource://devtools/client/webconsole/";
		try {
			this.lss(dir + "hudservice.js", loader);
		} catch(ex) {
			// Bug 1570320 - Rename hudservice.js into browser-console-manager.js (Firefox 70+)
			// https://bugzilla.mozilla.org/show_bug.cgi?id=1570320
			this.lss(dir + "browser-console-manager.js", loader);
			this.lss("data:,this.HUDService=BrowserConsoleManager", loader);
		}
		var e = new CustomEvent("DOMContentLoaded", {bubbles: false}), ww = loader.Services.ww;
		loader.Services.ww = Cu.getGlobalForObject(nsvo).Object.create(ww, {
			wins: {value: []},
			openWindow: {value: function() {
				var win = this.wins.shift();
				win.setTimeout(() => win.dispatchEvent(e), 0);
				return win;
			}}
		});
		return this.loader = nsvo[id] = loader;
	},
	element(name, attrs, parent) {
		var node = document.createXULElement(name);
		for(var attr in attrs) node.setAttribute(attr, attrs[attr]);
		parent && parent.append(node);
		return node;
	}
}).init();
this.tooltipText = "Консоль браузера" +"\n"+"\n"+
                   "ЛКМ: В боковой панели" +"\n"+
                   "СКМ: В новой вкладке" +"\n"+
                   "ПКМ: Стандартное меню "


пишет TypeError: document.querySelector(...) is null,
и вот в таком блоке
var e = (name, attrs, node, append) => {
        var elm = document.createXULElement(name);
        for(var a in attrs) elm.setAttribute(a, attrs[a]);
        append ? node.append(elm) : node.before(elm);
        return elm;
Тоже ошибка  TypeError: node is null

Отредактировано Andrey_Krropotkin (03-08-2023 07:51:19)

Отсутствует

 

№1692403-08-2023 09:34:46

Farby
Участник
 
Группа: Members
Зарегистрирован: 21-11-2012
Сообщений: 318
UA: Google 2.1

Re: Custom Buttons

Andrey_Krropotkin
а если так...

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

Выделить код

Код:

/*
		document.querySelector(
			'toolbarbutton[id^="sidebar-switcher-"] + toolbarseparator'
		).before(btn);
*/
		document.querySelector(
			parseInt(Services.appinfo.platformVersion) >= 116
			? 'menuitem[id^="sidebar-switcher-"] + menuseparator'
			: 'toolbarbutton[id^="sidebar-switcher-"] + toolbarseparator'
		).before(btn);

Отредактировано Farby (03-08-2023 10:06:47)


Жизнь иногда такое выкидывает, что хочется подобрать...

Отсутствует

 

№1692503-08-2023 10:12:52

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

Re: Custom Buttons

Farby так все работает спасибо

Отсутствует

 

Board footer

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