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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№115-01-2022 12:07:44

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

userChrome.js

Dumby
Здравия! Сделайте пожалуйста что бы этот скрипт: https://forum.mozilla-russia.org/viewto … 03#p776503 работал в актуальных версиях [firefox] !


P,S, и только для открытия истории из журнала и боковой панели в новой вкладке.


Win7

Отсутствует

 

№215-01-2022 21:01:13

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

Re: userChrome.js

kokoss
У меня нет userChrome.js, нужно железное обоснование (и ссылка),
почему именно userChrome.js, ведь у тебя есть UCF.


Недавно же sandro79 обращал наше внимание на то,
что в 96 отвалился ucf_wheretoopenlink.js. А отвалился он потому,
что Bug 1742801 «move whereToOpenLink and getRootEvent implementations into BrowserUtils».


Я тогда попытался набросать новый вариант, и вот теперь уже,
переделать под только Журнал (боковушка ведь тоже озаглавлена как Журнал).
Так что, если хочешь, попробуй (это в custom_script.js).

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

Выделить код

Код:

(async sel => {
	var trees = ["places", "historySidebar"];
	var url = "resource://gre/modules/BrowserUtils.jsm";
	var bu = ChromeUtils.import(url).BrowserUtils, {whereToOpenLink} = bu;

	bu.whereToOpenLink = function(e) {
		var res = whereToOpenLink.apply(bu, arguments);
		if (res != "current" || !Event.isInstance(e)) return res;
		try {
			var skip = true, trg = e.composedTarget, win = trg.ownerGlobal;
			var name = win.document.documentURIObject
				.QueryInterface(Ci.nsIURL).fileName.slice(0, -6);

			if (name == "browser")
				skip = win.gBrowser.selectedTab.isEmpty || !trg.closest(sel);

			else if (trees.includes(name))
				skip = (win.opener || win.windowRoot.ownerGlobal).gBrowser.selectedTab.isEmpty
					|| trg.closest("tree").selectedNode.itemId != -1;

			return skip ? res : "tab";
		}
		catch {return res;}
	}
})("#historyMenuPopup,#PanelUI-history");

Отсутствует

 

№315-01-2022 21:40:41

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

Re: userChrome.js

Dumby
Класс, при чём работает и в старой версии UCF!!! Благодарю :beer:


Add, всё же придётся перейти на актуальную версию UCF, в ней этот скрипт работает правильно!

Отредактировано kokoss (29-04-2022 22:24:59)


Win7

Отсутствует

 

№417-01-2022 01:38:50

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

Re: userChrome.js

Dumby пишет

Так что, если хочешь, попробуй (это в custom_script.js)

Благодарю за замену для ucf_wheretoopenlink.js для 96+
Работает по журналу отлично: с окна библиотеки, с боковой панели, с меню бутерброда, с вкладки chrome://browser/content/places/places.xhtml, в общем везде где есть журнал.
Работает как с user_chrome_files, так и с этим комплектом - одинаково, что меня очень обрадовало. Надо будет ещё с этим комплектом потестить.
Dumby, ну сделайте пожалуйста подобный компактный (873 байт) скрипт для версий [firefox] < 96. По идее должен будет наверно и в 78 работать.
И огромноая благодарность Вам за кнопку «вывести на кнопку индикацию muted-состояния активной вкладки» Тоже забрал на замену, работает отлично!

Отсутствует

 

№517-01-2022 21:06:48

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

Re: userChrome.js

sandro79 пишет

Работает как с user_chrome_files, так и с этим комплектом - одинаково, что меня очень обрадовало.

А меня это огорчает. Сколько раз было сказано,
что коды для для custom_script.js не следует совать в окна.
Но, видимо, это слишком сложная мысль.
Я даже не понимаю зачем это может понадобиться,
какой-то поиск приключений браузеру на ...

подобный компактный (873 байт) скрипт для версий [firefox] < 96

Кстати, в скрипте есть баг: в Библиотеке, в закладках,
в новой вкладке также открывается добро исторических кверей,
типа «Двадцать часто посещаемых», а это не есть Журнал.


Вобщем, запишу пока вместе с багом, который перекочует
и в боковую панель закладок, а ты выскажись, надо с этим
что-нибудь делать, или фиолетово, или может даже сойдёт за фичу.


Код для custom_script_win.js (вот его можно во всяких там комплектах проверять).
Набирал из-под 77, в 98 вроде тоже работает.

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

Выделить код

Код:

(async sel => {
	var wtol = whereToOpenLink;
	whereToOpenLink = function whereToOpenLink(e) {
		var res = wtol.apply(window, arguments);
		return res == "current" && !gBrowser.selectedTab.isEmpty &&
			Event.isInstance(e) && e.composedTarget.closest(sel) ? "tab" : res;
	}
	var puu = PlacesUIUtils, key = "openNodeWithEvent";
	if (puu[key].name.startsWith("b")) return;

	var bt = Object.create(puu), bwt = BrowserWindowTracker;
	bt._openNodeIn = (node, where, win) => {
		if (where == "current" && node.itemId == -1 &&
			!(win.opener || bwt.getTopWindow()).gBrowser.selectedTab.isEmpty
		)
			where = "tab";
		puu._openNodeIn(node, where, win);
	}
	puu[key] = puu[key].bind(bt);
})("#goPopup,#historyMenuPopup,#PanelUI-history");

Отсутствует

 

№617-01-2022 22:07:18

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

Re: userChrome.js

Dumby пишет

А меня это огорчает. Сколько раз было сказано, что коды для для custom_script.js не следует совать в окна

Да, это я припоминаю, но как запасной вариант что ли, так то вроде нормально работает в классических комплектах, ну навскидку. Впредь буду осмотрительней.

типа «Двадцать часто посещаемых», а это не есть Журнал

Да это не страшно, мелочи, пусть как фича будет.

Код для custom_script_win.js (вот его можно во всяких там комплектах проверять)

Скрипт подключал в custom_script_win.js в 69 и 78, в 91 и 98 в CustomStylesScripts.jsm в scriptschrome: { // Для докум. окна браузера [ChromeOnly]
Везде всё проверил, вроде всё как надо, работает везде по журналу, ну по мне - получилось отлично.
В основном использую журнал из автоскрываемой боковой панели, с журнала панели меню и значка в виде часов, размещённого на панели меню.
Огромное Спасибо! :beer:

Отсутствует

 

№717-08-2023 15:16:03

казявка
Участник
 
Группа: Members
Зарегистрирован: 13-08-2014
Сообщений: 139
UA: Firefox 115.0

Re: userChrome.js

как сделать чтоб было как в Центе нажать правой кнопкой на ссылку и было чтоб Скопировать текст ссылки
5.1692165433.png

Отсутствует

 

№817-08-2023 17:05:46

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

Re: userChrome.js

казявка
Уж не знаю что за Цент,
а для лисы как-то так, наверно

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

Выделить код

Код:

(async (id, url) => {
	if (location != url) return;
	var menuitem = document.createXULElement("menuitem");
	document.getElementById(id).after(menuitem);
	var hidden = () => !nsContextMenu.contentData.context.linkTextStr;	
	menuitem.hidden = true;
	menuitem.render = () => {
		if (hidden()) return;
		menuitem.hidden = false;
		menuitem.id = id + "text";
		menuitem.label = "Скопировать текст ссылки";
		menuitem.setAttribute("oncommand", "navigator.clipboard.writeText(gContextMenu.linkTextStr);");
		delete menuitem.render;
		menuitem.render();
		menuitem.render = () => menuitem.hidden = hidden();
	}
})("context-copylink", "chrome://browser/content/browser.xhtml");

Отредактировано Dumby (19-08-2023 09:47:19)

Отсутствует

 

№917-08-2023 17:20:21

казявка
Участник
 
Группа: Members
Зарегистрирован: 13-08-2014
Сообщений: 139
UA: Firefox 115.0

Re: userChrome.js

Dumby
ВЫ волшебник! я неделю наверно  искал в гугле в яндексе как так сделать и не нашел и пришлось ставить расширение Copy Link Text - а ВЫ на коленке сделали мою мечту - кладу ВАМ в карман огромное БЛШ СПС!

Отсутствует

 

№1018-08-2023 23:33:23

6e73epo
Участник
 
Группа: Members
Зарегистрирован: 06-05-2022
Сообщений: 207
UA: Firefox 119.0

Re: userChrome.js

Dumby пишет

а для лисы как-то так, наверно

Если этот скрипт прописать в userChrome.js от Aris-t2 или Endor8, то при каждом открытии главной консоли (Ctrl + Shift + J) такая ошибка:
Uncaught (in promise) TypeError: document.getElementById(...) is null
хотя это не мешает работе, т.е. текст ссылки копируется

Отсутствует

 

№1119-08-2023 09:47:56

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

Re: userChrome.js

6e73epo пишет

Uncaught (in promise) TypeError: document.getElementById(...) is null

Да, точно! userChrome же.
Следует проверять, что это именно документ окна браузера.
Я избалован UCF'ским custom_script_win.js, где такая проверка не требуется,
вот и вылетело из головы. Подправил.

Отсутствует

 

№1220-08-2023 13:55:26

fuchsfan
Участник
 
Группа: Members
Зарегистрирован: 07-08-2023
Сообщений: 123
UA: Firefox 115.0

Re: userChrome.js

@Dumby
Здравствуйте. У вас есть скрипт под ucf, добавляющий функцию открытия встроенного родного прогресса загрузки файла при старте загрузки, а не по ее окончании
https://forum.mozilla-russia.org/viewto … 32#p801732
В Firefox v115 он уже не работает, но я даже не об этом. Просьба адаптировать его, чтобы он работал в среде Aris-t2. Благодарю. Речь о встроенном окне загрузки в виде поп-апа, а не о классическом самостоятельном окне загрузки.

Отредактировано fuchsfan (20-08-2023 13:56:07)

Отсутствует

 

№1320-08-2023 16:11:32

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

Re: userChrome.js

fuchsfan пишет

Здравствуйте. У вас есть скрипт под ucf, добавляющий функцию открытия встроенного родного прогресса загрузки файла при старте загрузки, а не по ее окончании
https://forum.mozilla-russia.org/viewto … 32#p801732
В Firefox v115 он уже не работает

Ну почему не работает, у меня работает!
:offtopic:


Win7

Отсутствует

 

№1421-08-2023 16:29:36

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

Re: userChrome.js

fuchsfan пишет

Просьба адаптировать его, чтобы он работал в среде Aris-t2.

Почему у тебя в sandbox'е не работает я без понятия.
А в окно можно попробовать, например, так

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

Выделить код

Код:

(async (flag, url) => {
	if (location != url) return;
	await delayedStartupPromise;
	if (Downloads[flag]) return;
	Downloads[flag] = true;

	var bwt = BrowserWindowTracker;
	var show = function(download) {
		download.newDownloadNotified ||
		bwt.getTopWindow(this)?.DownloadsPanel.showPanel();
	};
	["PUBLIC", "PRIVATE"].forEach(async (type, ind) => {
		var view = Object.create(null);
		view.private = Boolean(ind);
		view.onDownloadChanged = show;
		(await Downloads.getList(Downloads[type])).addView(view);
	});
})("806555", "chrome://browser/content/browser.xhtml");

Отсутствует

 

№1521-08-2023 19:14:00

fuchsfan
Участник
 
Группа: Members
Зарегистрирован: 07-08-2023
Сообщений: 123
UA: Firefox 116.0

Re: userChrome.js

Dumby пишет

А в окно можно попробовать, например, так

Благодарю, работает как надо. И с Aris-t2, и с UCF...

Отредактировано fuchsfan (08-09-2023 14:35:35)

Отсутствует

 

№1608-09-2023 14:36:22

fuchsfan
Участник
 
Группа: Members
Зарегистрирован: 07-08-2023
Сообщений: 123
UA: Firefox 117.0

Re: userChrome.js

leshiy_odessa пишет

Решил вернуть себе нижнюю панель по типа AddonBar.

Эта панель работает в v117, v118b7, v119a1. На пару строчек ниже есть эта же панель с кнопкой скрыть\показать панель. Здесь https://forum.ru-board.com/topic.cgi?fo … tart=220#4 еще одна работающая нижняя панель с очень маленьким кодом в 20 строк. Там же в шапке описание активации скриптов методом Aris-t2, при внимательном выполнении совершенно не вызывает трудностей, я бы удалил все и выполнил повторно.

Отредактировано fuchsfan (11-09-2023 12:53:53)

Отсутствует

 

№1711-09-2023 13:38:45

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 294
UA: Firefox 117.0

Re: userChrome.js

fuchsfan пишет

Эта панель работает в v117, v118b7, v119a1. На пару строчек ниже есть эта же панель с кнопкой скрыть\показать панель.

А вы можете показать скриншот этой кнопки или написать где её искать?

fuchsfan пишет

я бы удалил все и выполнил повторно.

Дя я уже несколько раз всё перепроверял и переустанавливал. Есть подозрение что где-то конфликт.

Отсутствует

 

№1811-09-2023 14:37:57

fuchsfan
Участник
 
Группа: Members
Зарегистрирован: 07-08-2023
Сообщений: 123
UA: Firefox 118.0

Re: userChrome.js

leshiy_odessa пишет

А вы можете показать скриншот этой кнопки или написать где её искать?

Она сразу появилась в правом верхнем углу браузера, или смотрите в настройке панелей инструментов, и вытащить оттуда.
but.png

Отсутствует

 

№1911-09-2023 15:20:03

leshiy_odessa
Участник
 
Группа: Members
Зарегистрирован: 13-02-2009
Сообщений: 294
UA: Firefox 117.0

Re: userChrome.js

fuchsfan пишет

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

Да спасибо, у меня только что заработало с кнопки Restart, а потом начал добавлять остальное. Где я ошибся так и не понял.
Спасибо за помощь.

update И снова всё пропало. :(

 
update2 Како-то ломаю синтаксис — userChrome.js

Отредактировано leshiy_odessa (11-09-2023 15:50:02)

Отсутствует

 

№2026-09-2023 10:51:09

rubel
Участник
 
Группа: Members
Откуда: г.Самара
Зарегистрирован: 10-05-2005
Сообщений: 559
UA: Firefox 115.0

Re: userChrome.js

Dumby
Вроде на форуме нет темы по скриптам, подключаемых по методам
метод Aris-t2   метод xiaoxiaoflood   метод Endor8
Может нужно создать тему по этим методам.
Поэтому попрошу Вас здесь посмотреть скрипт ucf-mem-indicator.js
Он перестал работать в 115. Применяю метод Endor8 для загрузки скриптов.

скрытый текст
ucf-mem-indicator.js

Выделить код

Код:

(async id => ({

  delay: 2e3,

  val: "",
  init(topic, mm) {
    Services.obs.addObserver(mm = this, topic);
    Services.obs.addObserver(function quit(s, t) {
      this.timer?.cancel();
      Services.obs.removeObserver(mm, topic);
      Services.obs.removeObserver(quit, t);
    }, "quit-application-granted");
  },
  observe(win) {
    var df = win.MozXULElement.parseXULToFragment(
      `<hbox id="${id}" tooltiptext="${
        "ЛКМ: Минимизировать потребление памяти&#xA;ПКМ: about:performance&#xA;Ctrl+ПКМ: about:debugging#/runtime/this-firefox"
      }" onclick="event.button || ${
        "memoryMinimizationButton.doMinimize(event)"
      }"><label id="${id += "-label"}"/></hbox>`
    );
    this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
    (this.observe = async win => {
      this.timer.cancel();
      await new Promise(ChromeUtils.idleDispatch);
      var clone = win.document.importNode(df, true);
      clone.firstChild.oncontextmenu = this.about;
      win.document.getElementById("star-button-box").after(clone);
      this.notify();
    })(win);
  },
  about(e) {
    var gb = e.view.gBrowser;
    gb.selectedTab = gb.addTrustedTab(`about:${
      e.ctrlKey ? "debugging#/runtime/this-firefox" : "performance"
    }`);
  },
  async notify() {
    var info = await ChromeUtils.requestProcInfo();
    var bytes = info.memory;
    for(var child of info.children) bytes += child.memory;
    this.timer.initWithCallback(this, this.delay, this.timer.TYPE_ONE_SHOT);

    var prev = this.val;
    if ((this.val = this.mgb(bytes)) != prev)
      for(var win of CustomizableUI.windows) {
        var lab = win.document.getElementById(id);
        if (lab) lab.value = this.val;
      }
  },
  mgb: bytes => bytes < 1073741824
    ? Math.round(bytes / 1048576) + "MB"
    : (bytes / 1073741824).toFixed(2) + "GB"
}).init("browser-delayed-startup-finished"))("ucf-mem-indicator");

Отсутствует

 

№2126-09-2023 11:56:47

fuchsfan
Участник
 
Группа: Members
Зарегистрирован: 07-08-2023
Сообщений: 123
UA: Firefox 119.0

Re: userChrome.js

Открыть папку Chrome, Profiles хоткеем

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

Выделить код

Код:

// OpenChromeFolder(Alt+C).uc.js

(function(win){
    function openChromeDirectory() {
      // Get the chrome directory.
      let currUChrm = Services.dirsvc.get("UChrm", Ci.nsIFile);
      let chromeDir = currUChrm.path;
      // Show the chrome directory.
      let nsLocalFile = Components.Constructor("@mozilla.org/file/local;1","nsIFile", "initWithPath");
      new nsLocalFile(chromeDir).reveal();
    }
    if (typeof win.openChromeDirectory == 'undefined') {
        win.openChromeDirectory = openChromeDirectory;
        win.addEventListener('keydown', function(e) {
            if (e.altKey == true && e.keyCode == 67) {
                e.preventDefault();
                openChromeDirectory();
            }
        }, false);
    }
})(window);

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

Выделить код

Код:

// OpenProfileFolder(Alt+P).uc.js

(function(win){
    function openProfileDirectory() {
        Components.classes["@mozilla.org/file/directory_service;1"]
              .getService(Components.interfaces.nsIProperties)
              .get("ProfD", Components.interfaces.nsIFile)
              .launch();
    }
    if(typeof win.openProfileDirectory == 'undefined') {
        win.openProfileDirectory = openProfileDirectory;
        win.addEventListener('keydown', function(e) {
            if (e.altKey == true && e.keyCode == 80) {
                e.preventDefault();
                openProfileDirectory();
            }
        }, false);
    }
})(window);

Отсутствует

 

№2226-09-2023 13:24:33

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

Re: userChrome.js

rubel пишет

Dumby
Вроде на форуме нет темы по скриптам, подключаемых по методам
метод Aris-t2   метод xiaoxiaoflood   метод Endor8
Может нужно создать тему по этим методам.

А что по названию темы непонятно... ?!


Win7

Отсутствует

 

№2326-09-2023 21:09:32

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

Re: userChrome.js

rubel пишет

Применяю метод Endor8 для загрузки скриптов.

То есть, насколько могу судить, скрипты грузятся
в top-level окна документов с адресом с протоколом chrome://
и по событию "load".


В первом приближении, перерисовал так

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

Выделить код

Код:

location.href.endsWith("://browser/content/browser.xhtml") && (async id => {
	var g = Cu.getGlobalForObject(Cu);
	g[id] || Services.scriptloader.loadSubScript("data:charset=utf-8," + encodeURIComponent(`(${id => this[id] = {

		delay: 2e3,

		val: "",
		init(win) {
			var df = win.MozXULElement.parseXULToFragment(
				`<hbox id="${id}" tooltiptext="${
					"ЛКМ: Минимизировать потребление памяти&#xA;ПКМ: about:performance&#xA;Ctrl+ПКМ: about:debugging#/runtime/this-firefox"
				}" onclick="event.button || ${
					"memoryMinimizationButton.doMinimize()"
				}"><label id="${id += "-label"}"/></hbox>`
			);
			this.cui = win.CustomizableUI;
			var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
			this.next = timer.initWithCallback.bind(null, this, this.delay, timer.TYPE_ONE_SHOT);

			(this.init = win => {
				timer.cancel();
				var clone = win.document.importNode(df, true);
				clone.firstChild.oncontextmenu = this.about;
				win.document.getElementById("star-button-box").after(clone);
				this.notify();
			})(win);
		},
		about(e) {
			var gb = e.view.gBrowser;
			gb.selectedTab = gb.addTrustedTab(`about:${
				e.ctrlKey ? "debugging#/runtime/this-firefox" : "performance"
			}`);
		},
		async notify() {
			var info = await ChromeUtils.requestProcInfo();
			var bytes = info.memory;
			for(var child of info.children) bytes += child.memory;
			this.next();

			var prev = this.val;
			if ((this.val = this.mgb(bytes)) != prev)
				for(var win of this.cui.windows) {
					var lab = win.document.getElementById(id);
					if (lab) lab.value = this.val;
				}
		},
		mgb: bytes => bytes < 1073741824
			? Math.round(bytes / 1048576) + "MB"
			: (bytes / 1073741824).toFixed(2) + "GB"

	}})("${id}");`), g);

	g[id].init(window);
})("urlbar-memory-indicator");

Отсутствует

 

№2427-09-2023 05:29:50

rubel
Участник
 
Группа: Members
Откуда: г.Самара
Зарегистрирован: 10-05-2005
Сообщений: 559
UA: Firefox 115.0

Re: userChrome.js

Dumby
Огромное спасибо, работает превосходно. :)

Отсутствует

 

№2530-09-2023 08:30:13

6e73epo
Участник
 
Группа: Members
Зарегистрирован: 06-05-2022
Сообщений: 207
UA: Firefox 117.0

Re: userChrome.js

Dumby, существует ли возможность на кнопке в onCommand: function(event) {...)  прописать команды, чтобы кнопка открывала определенный раздел реестра через запуск regedit? Просто ответьте да или нет.

Отредактировано 6e73epo (30-09-2023 08:31:51)

Отсутствует

 

Board footer

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