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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№1520115-02-2021 08:20:51

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

Re: Custom Buttons

beggrr пишет

Значит теперь на содержимое страницы воздействовать через СВ не получится? Ни убрать лишнее, ни добавить, ничего

Ну как, если была склонность использовать CB как Greasemonkey,
то да, такие удобства, определённо, уничтожены многопроцессностью.
Но, в принципе, пока ничего невозможного нет, просто стало сложнее,
или намного сложнее, зависит от задачи.


solombala пишет

пункт из контекста не удаляется "кодировать изображение в текст файл base64"

Не вижу в контексте такого пункта.
Если имеется в виду «Запомнить изображение как base64»,
то можно заменить return !gContextMenu.onImage; на
return !(gContextMenu.onImage && Services.prefs.getBoolPref("Save.WebScreenShotOnImage", false));

Отсутствует

 

№1520215-02-2021 08:53:51

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

Re: Custom Buttons

Dumby

Dumby пишет

то можно заменить return !gContextMenu.onImage; на
return !(gContextMenu.onImage && Services.prefs.getBoolPref("Save.WebScreenShotOnImage", false));

Класс!

Отсутствует

 

№1520315-02-2021 14:58:52

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 85.0

Re: Custom Buttons

egorsemenov06
Я не уследил, может Вы уже здесь спрашивали. Случайно, не просили переделать (или адаптировать, не знаю, как правильно сказать) следующие кнопки для ucf?
https://github.com/Infocatcher/Custom_Buttons/blob/master/Session_Bookmarks/sessionBookmarks.js
https://github.com/Infocatcher/Custom_Buttons/blob/master/Undo_Close_Tabs/undoCloseTabs.js
Undo_Close_Tabs - эта мне симпатичнее, чем в расширении Виталия Add Toolba Bbuttons кнопка "Восстановить". Я не пользуюсь окнами и мне лучше, когда по ПКМ вижу сразу список закрытых вкладок + 2 пункта меню: "Очистить историю закрытых вкладок" и "Восстановить последнюю сессию".
Кстати, to ALL: Infocatcher обновил кнопку Cookies_Permissions, а Vitaliy V. user_chrome_files. Оба 20 часов назад.))

Отредактировано xrun1 (15-02-2021 15:00:17)

Отсутствует

 

№1520415-02-2021 19:21:30

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

Re: Custom Buttons

xrun1

Кстати, to ALL

:beer: добрая весть, как ты отслеживаешь, я подписан у них на свежие релизы, до сих пор тишина на мыле

Отсутствует

 

№1520515-02-2021 19:46:40

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 85.0

Re: Custom Buttons

bezuma
Случайно получилось. :) Писал пост, сунулся, чтобы ссылки прицепить и заметил даты.

Отсутствует

 

№1520615-02-2021 21:59:57

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

Re: Custom Buttons

xrun1 пишет

переделать (или адаптировать, не знаю, как правильно сказать)
https://github.com/Infocatcher/Custom_Buttons/blob/master/Undo_Close_Tabs/undoCloseTabs.js

Никак правильно не сказать.
Кнопку такого масштаба и великолепия нереально переделать или адаптировать.


Можно только сбросить код кнопки на диск, а в custom_script.js добавить
какой-то код, как некий примитивный симулякр CB, заточенный конкретно под эту кнопку.
То есть, пишем набросок типа такого, затем тестируем на предмет чего симулякру не хватает.

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

Выделить код

Код:

try {CustomizableUI.createWidget({
	label: "Undo Close Tab",
	id: "ucf-cbbtn-UndoCloseTab",
	localized: false,
	get initCode() {
		delete this.initCode;
		return this.initCode = Cu.readUTF8URI(Services.io.newURI(
			"chrome://user_chrome_files/content/custom_scripts/undoCloseTabs.js"
		));
	},
	onCreated(btn) {
		Object.defineProperty(btn, "icon", {
			configurable: true, get() {
				delete btn.icon;
				return {};
		}});
		var win = btn.ownerGlobal;
		new win.Function("xulns", this.initCode).call(btn, "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
		win.addEventListener("unload", () => btn.onDestroy("destructor"), {once: true});
		delete btn.undoCloseTabsList.cbMenu;
		btn.defaultContextId = "toolbar-context-menu";
	}
});} catch(ex) {Cu.reportError(ex);}

Отредактировано Dumby (16-02-2021 07:25:22)

Отсутствует

 

№1520715-02-2021 22:17:33

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 378
UA: Firefox 85.0

Re: Custom Buttons

xrun1 пишет

egorsemenov06
Я не уследил, может Вы уже здесь спрашивали. Случайно, не просили переделать (или адаптировать, не знаю, как правильно сказать) следующие кнопки для ucf?
https://github.com/Infocatcher/Custom_Buttons/blob/master/Session_Bookmarks/sessionBookmarks.js
https://github.com/Infocatcher/Custom_Buttons/blob/master/Undo_Close_Tabs/undoCloseTabs.js
Undo_Close_Tabs - эта мне симпатичнее, чем в расширении Виталия Add Toolba Bbuttons кнопка "Восстановить". Я не пользуюсь окнами и мне лучше, когда по ПКМ вижу сразу список закрытых вкладок + 2 пункта меню: "Очистить историю закрытых вкладок" и "Восстановить последнюю сессию".
Кстати, to ALL: Infocatcher обновил кнопку Cookies_Permissions, а Vitaliy V. user_chrome_files. Оба 20 часов назад.))

Вроде нет но я использую кнопку восстановить от Vitaliy V.

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

Выделить код

Код:

//Восстановить
try {(() => {
    var id = "ucf-undo-tab",
    label = "Восстановить",
    tooltiptext = "ЛКМ: Восстановить вкладку\nПКМ: Восстановить окно",
    tooltiptextbtnmenu = "ЛКМ: Открыть меню\nПКМ: Показать весь журнал",
    img = "data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGltYWdlIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FNQUFBQW9MUTlUQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUNCalNGSk4gQUFCNkpnQUFnSVFBQVBvQUFBQ0E2QUFBZFRBQUFPcGdBQUE2bUFBQUYzQ2N1bEU4QUFBQmFGQk1WRVgvLy8vLy8vL20vLytYeXVEZiA3LytiemVKY25Mc2JjcDZMakllTGpJZW1yNitUeGRzd2Y2Wk9oYUo4bEoyUmtZMlNrNCtabVpXaHBLS0x2TkZSazdROGhxZVBrSXZnIDROLzI5dmIxOXZiTTdQWmluNzR1ZnFiZzROL3U3dTdtOFBKdnJzdENqclBnNE4vdjcrL3Y3Ky9rOFBSb3FNYzVoNjB2Z0trOWlhL2YgNE43dzhQRHc4UERpNy9aZ3BNT0x0TW55OWZZbWVhSXFmYWZmNE43djcrL3Y3Ky9oOFBWd3FjVEIxTjNMM2VadHJNcUxqSWVPajRyZiAzOTd3OFBEdzhQQ010ODFocE1QTDdmbWJuSmVvcWFYcjYrdng4Zkg0Ky92RjJ0K2xxNnFLbEkraG9wMzgvUHo3Ky92MDlQVDUrZm45IC9mMjl2cnVMakllcXE2ZjcrL3Z3OFBENStmbkd4c1NMaklkNXJjZjQrL3hhbTd2TjZQZmc4dnpuOHZpZXh0b2FjcDZJeHV1WTEvK1UgMXYraDIvL0E1Ly9tOC9veWhhOTh3dXgrdys1aHJOZHZ0K0tSenZPNjJlb3ZncTA3akxjNGliTjh1ZDBaY1owNWlyY2JjcDRrZWFVYSBjWjMvLy8reURYUVZBQUFBV1hSU1RsTUFBUW8rRU1uN2NTWXdRdDNUY3crSDlPenUvUDVMdi9yNCtQMzhIdlRYNFA3VjhycTd5LzM2IC92bnhucCs1L2NITy92enZnb09tMEpISTBRN1A3bVpuenZrMHNPVHFTcUwxNGg2aWxsc3VSb0duSlVjMUVTWk1EODJ5YzZZQUFBQUIgWWt0SFJBQ0lCUjFJQUFBQUIzUkpUVVVINUFNV0Z6UW81Q1Z2WHdBQUFLMUpSRUZVR05OallJQURSZ1pVd01TTUtzTEN5c1lPWlhKdyBBZ0VYZDJRVUR5OGZpTTh2SUNnb0tDUWNIUk1iRnk4aUNoUVFFNWVRa0pSS1NFeEtUa2xOazVZQkNzakt5Y25KSzZSblpHWmw1K1FxIEFnV1VsSldWVlZUVjh2TFZOUW9LTllFQ1d0cEFvS09yVjZSdllGaHNCQlF3TmdFQlV6TnpDOHVTVWlzR2F4dGJPekN3dDdkektITjAgWW5CMmNYV0RBWGNQVHk4R2J4OWZQeGp3RHdnTVlnZ09DVVdBc1BBSUJvSUFBRkpzSjVSdFJ5S29BQUFBSlhSRldIUmtZWFJsT21OeSBaV0YwWlFBeU1ESXdMVEF6TFRJeVZESXpPalV5T2pRd0t6QXdPakF3VVJxUEdRQUFBQ1YwUlZoMFpHRjBaVHB0YjJScFpua0FNakF5IE1DMHdNeTB5TWxReU16bzFNam8wTUNzd01Eb3dNQ0JITjZVQUFBQUFTVVZPUks1Q1lJST0iLz48L3N2Zz4=",
    imgmenu = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='16' width='16' viewBox='0 0 48 48'><g><circle cy='24' cx='24' style='fill:rgb(0, 120, 173);' r='20'/><path style='opacity:0.25;fill:black;' d='M 33,41.8 22.3,31.1 36.7,17.9 44,25.2 C 43.5,30.6 41,37.7 33,41.8 Z'/><path style='fill:white;stroke:white;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;' d='M 35,19 H 13 L 24,30 35,19' /></g></svg>";

    CustomizableUI.createWidget({
        id: id,
        type: "custom",
        label: label,
        tooltiptext: tooltiptext,
        localized: false,
        defaultArea: CustomizableUI.AREA_NAVBAR,
        onBuild: function(document) {
            var win = document.defaultView, toolbaritem = document.createXULElement("toolbaritem");
            toolbaritem.id = id;
            toolbaritem.className = "chromeclass-toolbar-additional";
            toolbaritem.setAttribute("label", label);
            toolbaritem.setAttribute("type", "custom");
            var toolbarbutton_0 = document.createXULElement("toolbarbutton");
            toolbarbutton_0.id = `${id}-button`;
            toolbarbutton_0.className = "toolbarbutton-1";
            toolbarbutton_0.setAttribute("label", label);
            toolbarbutton_0.setAttribute("tooltiptext", tooltiptext);
            toolbarbutton_0.setAttribute("context", "false");
            toolbarbutton_0.addEventListener("click", function(event) {
                if (event.button == 0)
                    win.undoCloseTab();
                else if (event.button == 2) {
                    event.preventDefault();
                    event.stopPropagation();
                    win.undoCloseWindow();
                }
            });
            toolbaritem.append(toolbarbutton_0);
            var toolbarbutton_1 = document.createXULElement("toolbarbutton");
            toolbarbutton_1.id = `${id}-button-menu`;
            toolbarbutton_1.className = "toolbarbutton-1";
            toolbarbutton_1.setAttribute("type", "menu");
            toolbarbutton_1.setAttribute("label", "");
            toolbarbutton_1.setAttribute("tooltiptext", tooltiptextbtnmenu);
            toolbarbutton_1.setAttribute("context", "false");
            toolbarbutton_1.addEventListener("click", function(event) {
                if (event.button == 2) {
                    event.preventDefault();
                    event.stopPropagation();
                    win.PlacesCommandHook.showPlacesOrganizer("History");
                }
            });
            var menupopup_0 = document.createXULElement("menupopup");
            menupopup_0.id = `${id}-popup`;
            menupopup_0.setAttribute("tooltip", "bhTooltip");
            menupopup_0.setAttribute("popupsinherittooltip", true);
            menupopup_0.addEventListener("click", function(event) {
                event.stopPropagation();
            });
            menupopup_0.addEventListener("command", function(event) {
                event.stopPropagation();
            });
            var menu_0 = document.createXULElement("menu");
            menu_0.setAttribute("disabled", true);
            menu_0.setAttribute("label", "Недавно закрытые вкладки");
            var menupopup_1 = document.createXULElement("menupopup");
            menupopup_1.addEventListener("popupshowing", function(event) {
                while (menupopup_1.hasChildNodes())
                    menupopup_1.firstChild.remove();
                if (win == Services.appShell.hiddenDOMWindow || win.SessionStore.getClosedTabCount(win) == 0) {
                    menu_0.setAttribute("disabled", true);
                    return;
                }
                var tabsFragment = win.RecentlyClosedTabsAndWindowsMenuUtils.getTabsFragment(win, "menuitem");
                menupopup_1.append(tabsFragment);
                menu_0.removeAttribute("disabled");
            });
            menu_0.append(menupopup_1);
            menupopup_0.append(menu_0);
            var menu_1 = document.createXULElement("menu");
            menu_1.setAttribute("disabled", true);
            menu_1.setAttribute("label", "Недавно закрытые окна");
            var menupopup_2 = document.createXULElement("menupopup");
            menupopup_2.addEventListener("popupshowing", function(event) {
                while (menupopup_2.hasChildNodes())
                    menupopup_2.firstChild.remove();
                if (win.SessionStore.getClosedWindowCount() == 0) {
                    menu_1.setAttribute("disabled", true);
                    return;
                }
                var windowsFragment = win.RecentlyClosedTabsAndWindowsMenuUtils.getWindowsFragment(win, "menuitem");
                menupopup_2.append(windowsFragment);
                menu_1.removeAttribute("disabled");
            });
            menu_1.append(menupopup_2);
            menupopup_0.append(menu_1);
            menupopup_0.addEventListener("popupshowing", function(event) {
                if (win == Services.appShell.hiddenDOMWindow || win.SessionStore.getClosedTabCount(win) == 0)
                    menu_0.setAttribute("disabled", true);
                else
                    menu_0.removeAttribute("disabled");
                if (win.SessionStore.getClosedWindowCount() == 0)
                    menu_1.setAttribute("disabled", true);
                else
                    menu_1.removeAttribute("disabled");
            });
            var menuitem_0 = document.createXULElement("menuitem");
            menuitem_0.id = `${id}-all-history`;
            menuitem_0.setAttribute("label", "Показать весь журнал");
            menuitem_0.addEventListener("command", function(event) {
                event.stopPropagation();
                win.PlacesCommandHook.showPlacesOrganizer("History");
            });
            menupopup_0.append(menuitem_0);
            var menuitem_1 = document.createXULElement("menuitem");
            menuitem_1.setAttribute("label", "Удалить недавнюю историю…");
            menuitem_1.addEventListener("command", function(event) {
                event.stopPropagation();
                win.Sanitizer.showUI(win);
            });
            menupopup_0.append(menuitem_1);
            toolbarbutton_1.append(menupopup_0);
            toolbaritem.append(toolbarbutton_1);
            var btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(`
                #${id}-button {
                    list-style-image: url("${img}") !important;
                    -moz-image-region: rect(0px, 16px, 16px, 0px) !important;
                    margin-inline-end: 0 !important;
                }
                #${id}-button-menu {
                    list-style-image: url("${imgmenu}") !important;
                    -moz-image-region: rect(0px, 16px, 16px, 0px) !important;
                    margin-inline-start: 0px !important;
                }
                toolbarpaletteitem[place="palette"] #${id}-button-menu,
                #${id}-button-menu dropmarker {
                    display: none !important;
                }
                toolbarpaletteitem[place="palette"] #${id} {
                    -moz-box-orient: vertical !important;
                }
                #${id}-button-menu > .toolbarbutton-icon {
                    min-width: 0 !important;
                    max-width: none !important;
                    width: auto !important;
                    padding-left: 0 !important;
                    padding-right: 0 !important;
                }
            `);
            try {
                win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET);
            } catch (e) {}
            return toolbaritem;
        }
    });
})();} catch(e) {}


подключена она в custom_script.js
скрытый текст

Выделить код

Код:

(() => {
    var loadscript = name => {
        try {
            Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, globalThis, "UTF-8");
        } catch(e) {}
    };

    loadscript("undo-tab.js");
  // и т. д.
})();

Отсутствует

 

№1520816-02-2021 01:03:57

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 85.0

Re: Custom Buttons

Dumby
Откровенно говоря и не надеялся на положительный ответ. Слишком сложная и действительно великолепная кнопка. Но что интересно, работает в предложенном варианте. Только со строкой меню "Восстановить последнюю сессию" проблема - пропадает после очистки списка закрытых вкладок. И после очистки по ПКМ в кнопке классическое меню CB. В общем, раз "малой кровью" не получается, буду использовать вариант CB. Спасибо за предложенный вариант, взял на заметку.
egorsemenov06
Эта у меня тоже есть из поста https://forum.mozilla-russia.org/viewtopic.php?pid=784332#p784332

Отсутствует

 

№1520916-02-2021 10:01:02

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

Re: Custom Buttons

solombala
Чето не могу победить стробоскоп в 86

Отсутствует

 

№1521016-02-2021 13:43:09

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

Re: Custom Buttons

Garalf
беты версии не обсуждаю.

Отсутствует

 

№1521116-02-2021 15:54:32

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Chrome 88.0

Re: Custom Buttons

Раньше в СВ были две удобные фичи. Первая: можно было открыть окно и запретить в нем загрузку нежелательного контента.

Выделить код

Код:

let win = open('','',param);
docShell = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShell);
docShell.allowImages = false;
docShell.allowJavascript = false;
docShell.allowPlugins = false;

И вторая, можно было открыть закладку по ее ключевому слову.

Выделить код

Код:

loadURI(PlacesUtils.getURLAndPostDataForKeyword('keyword')[0]);

Есть сейчас замена этим двум фичам?

Отсутствует

 

№1521217-02-2021 12:19:57

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

Re: Custom Buttons

hartumov пишет

Есть сейчас замена этим двум фичам?

Первая, как-то так, наверно.
Плюс, приглядывать за багами, типа такого.

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

Выделить код

Код:

OpenBrowserWindow().addEventListener("XULFrameLoaderCreated", {
	async handleEvent(e) {
		if (!e.target.matches("[id^=panel-].browserSidebarContainer :scope"))
			return;
		await Promise.resolve();
		var func = type => {
			var restrict = () => {
				destroy();
				docShell.allowImages = docShell.allowJavascript
					= docShell.allowPlugins = false;
			}
			var destroy = () => {
				removeEventListener(type, restrict);
				removeEventListener("unload", destroy);
			}
			addEventListener(type, restrict);
			addEventListener("unload", destroy);
		}
		var url = "data:charset=utf-8," + encodeURIComponent(
			`(${func})("DOMDocElementInserted");`
		);
		var {type} = e, stack = e.target.parentNode;

		var unload = () => {
			stack.removeEventListener(type, this);
			tab.removeEventListener("TabClose", tabClose);
		}
		var win = e.target.ownerGlobal;
		win.addEventListener("unload", unload, {once: true});

		var tabClose = () => {
			stack.removeEventListener(type, this);
			win.removeEventListener("unload", unload);
		}
		var tab =  win.gBrowser.getTabForBrowser(e.target);
		tab.addEventListener("TabClose", tabClose, {once: true});

		win.removeEventListener(type, this);
		(this.handleEvent = e => e.target.messageManager.loadFrameScript(url, false))(e);
		stack.addEventListener(type, this);
	}
});


Вторая
скрытый текст

Выделить код

Код:

PlacesUtils.keywords.fetch("keyword").then(res => res && openLinkIn(res.url.href, "current", {
	postData: res.postData, triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
}));

Отредактировано Dumby (18-02-2021 00:52:22)

Отсутствует

 

№1521317-02-2021 20:13:26

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Chrome 88.0

Re: Custom Buttons

Dumby пишет
hartumov пишет

Есть сейчас замена этим двум фичам?

Первая, как-то так, наверно.
Плюс, приглядывать за багами, типа такого.

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

Выделить код

Код:

OpenBrowserWindow().addEventListener("XULFrameLoaderCreated", {
	async handleEvent(e) {
		if (!e.target.matches("[id^=panel-].browserSidebarContainer :scope"))
			return;
		await Promise.resolve();
		var func = type => {
			var restrict = () => {
				destroy();
				docShell.allowImages = docShell.allowJavascript
					= docShell.allowPlugins = false;
			}
			var destroy = () => {
				removeEventListener(type, restrict);
				removeEventListener("unload", destroy);
			}
			addEventListener(type, restrict);
			addEventListener("unload", destroy);
		}
		var url = "data:charset=utf-8," + encodeURIComponent(
			`(${func})("DOMDocElementInserted");`
		);
		var {type} = e, stack = e.target.parentNode;

		var unload = () => {
			stack.removeEventListener(type, this);
			tab.removeEventListener("TabClose", tabClose);
		}
		var win = e.target.ownerGlobal;
		win.addEventListener("unload", unload, {once: true});

		var tabClose = () => {
			stack.removeEventListener(type, this);
			win.removeEventListener("unload", unload);
		}
		var tab =  win.gBrowser.getTabForBrowser(e.target);
		tab.addEventListener("TabClose", tabClose, {once: true});

		win.removeEventListener(type, this);
		(this.handleEvent = e => e.target.messageManager.loadFrameScript(url, false))(e);
		stack.addEventListener(type, this);
	}
});


Вторая
скрытый текст

Выделить код

Код:

PlacesUtils.keywords.fetch("keyword").then(res => res && openLinkIn(res.url, "current", {
	postData: res.postData, triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
}));

Dumby
Первый код открывает новое окно, у меня это настроено на домашнюю страницу. А как сделать, чтобы  в этом окне сразу открылся нужный адрес?


А со вторым кодом ничего не получается. В эту строчку PlacesUtils.keywords.fetch("keyword") вместо keyword я вставляю краткое имя закладки или просто веб адрес. Не происходит ничего, только в консоли пишет Promise { <state>: "pending" }

Отсутствует

 

№1521417-02-2021 21:19:17

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

Re: Custom Buttons

hartumov пишет

А как сделать, чтобы  в этом окне сразу открылся нужный адрес?

Можно заменить первую строку на

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

Выделить код

Код:

openDialog(
	AppConstants.BROWSER_CHROME_URL,
	"_blank", "chrome,all,dialog=no", "нужный_адрес"
).addEventListener("XULFrameLoaderCreated", {

hartumov пишет

вместо keyword я вставляю краткое имя закладки или просто веб адрес. Не происходит ничего, только в консоли пишет Promise { <state>: "pending" }

Интересно, откуда может взяться запись в консоли?
Разве что запускать, собственно, с консоли.


И что значит «или просто веб адрес»? Написано было чётко:

И вторая, можно было открыть закладку по ее ключевому слову.

При чём тут «веб адрес»? Если приведённому тобой коду, на Firefox 56,
скормить вместо keyword «просто веб адрес», то он тоже ничего не откроет.
А по краткому имени — должен открывать. Может в keyword'е опечатка.

Отсутствует

 

№1521517-02-2021 22:45:03

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Chrome 88.0

Re: Custom Buttons

Dumby пишет
hartumov пишет

вместо keyword я вставляю краткое имя закладки или просто веб адрес. Не происходит ничего, только в консоли пишет Promise { <state>: "pending" }

Интересно, откуда может взяться запись в консоли?
Разве что запускать, собственно, с консоли.


И что значит «или просто веб адрес»? Написано было чётко:

И вторая, можно было открыть закладку по ее ключевому слову.

При чём тут «веб адрес»? Если приведённому тобой коду, на Firefox 56,
скормить вместо keyword «просто веб адрес», то он тоже ничего не откроет.
А по краткому имени — должен открывать. Может в keyword'е опечатка.

С веб адресом это я просто оговорился.
У меня не получалось запустить этот код из кнопки, потому я попробовал с консоли.
А не получалось потому, что я вставлял краткое имя букмарклета. Букмарклет не вызывается, хотя старый код

Выделить код

Код:

loadURI(PlacesUtils.getURLAndPostDataForKeyword('keyword')[0]);

прекрасно с этим справлялся.

А если закладка  с обычным адресом - то да, новый код работает. А букмарклет загрузить никак нельзя?


И еще вопрос, вот в этой строчке

Выделить код

Код:

openLinkIn(res.url, "current"

я меняю current на window - закладка открывается в новом окне. А если меняю на tab, не работает. Почему?

Отсутствует

 

№1521618-02-2021 00:48:37

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

Re: Custom Buttons

hartumov пишет

А не получалось потому, что я вставлял краткое имя букмарклета.

Да, вижу, интересный кейс.
Порылся немного, вот так, вроде, работает.

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

Выделить код

Код:

PlacesUtils.keywords.fetch("keyword").then(res => {
	if (!res) return;
	var {url: {href}, postData} = res;
	var allowPopups = href.startsWith("javascript:");
	openLinkIn(href, "current", {
		postData, allowPopups, allowInheritPrincipal: allowPopups,
		triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
	});
});

hartumov пишет

А если меняю на tab, не работает. Почему?

Потому, что res.url это объект, инстанция URL.
Легко превращается в строку, поэтому так и оставил.
А когда res.url отправляется открываться как tab, то, в цепочке вызовов,
на нём вызывается метод replace(), которого нет. Ошибка останавливает дальнейшее исполнение.
Код был расчитан на "current", но да, надо было, всё таки, передать строку, то есть res.url.href

Отсутствует

 

№1521718-02-2021 18:42:05

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Chrome 88.0

Re: Custom Buttons

Dumby
Всё получилось. Большое спасибо за помощь и разъяснения!

Отсутствует

 

№1521819-02-2021 14:18:16

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

Re: Custom Buttons

Dumby
network.proxy.socks_remote_dns -false ///А на простые прокси https подобное можно?
И код: куки delete ? Все очистить

Отредактировано solombala (19-02-2021 23:11:45)

Отсутствует

 

№1521920-02-2021 14:41:07

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 207
UA: Chrome 70.0

Re: Custom Buttons

Как  показать  список закрытых вкладок т. е. вот это menupop#historyUndoPopup
Чтобы не лазить через меню Журнал и т. д... а сразу и отдельно посередине экрана?

Отсутствует

 

№1522020-02-2021 18:01:29

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

Re: Custom Buttons

Ferguss114 пишет

Как  показать  список закрытых вкладок т. е. вот это menupop#historyUndoPopup
Чтобы не лазить через меню Журнал и т. д... а сразу и отдельно посередине экрана?

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

Выделить код

Код:

SessionStore.getClosedTabCount(window) && (this.hpopup || (this.hpopup = (() => {
	var popup = document.createXULElement("menupopup", {is: "places-popup"});
	for(var args of Object.entries({
		context: "",
		placespopup: true,
		tooltip: "bhTooltip",
		onpopupshowing: "fill()",
		id: _id + "-historyUndoPopup"
	}))
		popup.setAttribute(...args);

	popup.fill = () => {
		popup.textContent = "";
		popup.append(RecentlyClosedTabsAndWindowsMenuUtils.getTabsFragment(window, "menuitem"));
		var {width, height} = popup.getBoundingClientRect();
		popup.moveTo((screen.availWidth - width)/2, (screen.availHeight - height)/2);
	}
	return this.appendChild(popup);
})()))
	.openPopupAtScreen();

solombala пишет

Dumby
network

Может лучше пойди подрядить «агента Шифт»,
чтобы подвинуть урлбарский плейсхолдер,
вместо того, чтобы вопрошать про «network» не по адресу.

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

Выделить код

Код:

#urlbar #urlbar-input::placeholder {
	text-indent: 22px !important;
}

Отредактировано Dumby (20-02-2021 22:12:57)

Отсутствует

 

№1522120-02-2021 19:33:03

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

Re: Custom Buttons

Dumby

Dumby пишет

Может лучше пойди подрядить «агента Шифт»,

Не понял...Куда код вставлять? Явно не в userchrome.

Отсутствует

 

№1522220-02-2021 21:45:28

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

Re: Custom Buttons

solombala пишет

Не понял...Куда код вставлять? Явно не в userchrome.

Да, не userchrome.
Попробовал (по всякому) куда-то в omni.ja, и не получилось, видимо, руки кривые.


А вот в ucf custom_style_agent.css — работает. Ну и такие варианты, конечно, тоже.

CB

Выделить код

Код:

(css => {
	var type = windowUtils.AGENT_SHEET;
	var url = "data:text/css;charset=utf-8," + encodeURIComponent(css);
	windowUtils.loadSheetUsingURIString(url, type);
	addDestructor(() => windowUtils.removeSheetUsingURIString(url, type));
})(`
	#urlbar #urlbar-input::placeholder {
		text-indent: 22px !important;
	}
`);


config.js

Выделить код

Код:

(async css => Cc["@mozilla.org/content/style-sheet-service;1"]
	.getService(Ci.nsIStyleSheetService).loadAndRegisterSheet(
		Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService).newURI(
			"data:text/css;charset=utf-8," + encodeURIComponent(css)
		),
		Ci.nsIStyleSheetService.AGENT_SHEET
	)
)(`
	@-moz-document url(chrome://browser/content/browser.xhtml) {
		#urlbar #urlbar-input::placeholder {
			text-indent: 22px !important;
		}
	}
`);

Отсутствует

 

№1522320-02-2021 22:16:58

dezhnev
Участник
 
Группа: Members
Зарегистрирован: 21-04-2016
Сообщений: 72
UA: Edge 84.0

Re: Custom Buttons

https://github.com/xiaoxiaoflood/firefox-scripts/issues/64

как-то все молчат, а уже "security engineering team", аккуратно назвав тему "Compatability with Future Versions of Firefox", интересуются использованием autoconfig
пока к конкретному случаю привязано (load scripts off-the-main thread), но известно ж как мацарелла похерить все может
неужели 1% юзеров тоже выкинут? кто ж останется..

Отсутствует

 

№1522420-02-2021 23:50:41

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

Re: Custom Buttons

Dumby
Тонкий ход! Config.js не понадобился.   Тоже omni.ja весь перелопатил...Ну, ты , мастер...
А нельзя это же в польз.скрипт это запихать? Не надо. Вставил в custom_style_agent.css

Отредактировано solombala (21-02-2021 13:32:29)

Отсутствует

 

№1522521-02-2021 00:30:44

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 207
UA: Chrome 70.0

Re: Custom Buttons

Dumby
Список закрытых вкладок - класс, спасибо!!

Отсутствует

 

Board footer

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