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

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

№15107-10-2022 18:00:03

austri
Участник
 
Группа: Members
Зарегистрирован: 20-01-2009
Сообщений: 162
UA: Firefox 68.0

Re: Почему-то никак не удаётся заставить его заработать напрямую

можно попробовать временно переключать настройку

мне показалось, что это звучит чуть ли не как решённая проблема, но в итоге ничего не изменилось
 
вот на всякий случай весь код (надеюсь, что это я напутал что-то):

Выделить код

Код:

(() => {
	var link, href, x, y, cssvar = "--selcolorlocker";

	var sip = Services.prefs.setIntPref;
	var pn = "extensions.tabmix.opentabforLinks";
	var set1 = sip.bind(null, pn, 1);

	var check = () => {
		return link.className == "pg";
	}

	var click = e => {
		link.removeEventListener("click", click, true);
		e.preventDefault();
		loadURI(link.href, link.ownerDocument.documentURIObject);
		link = null;
	}
	var ret = skip => {
		link.setAttribute("href", href);
		link.style.removeProperty(cssvar);
		link.getAttribute("style") === "" && link.removeAttribute("style");
		skip ? link = null : link.addEventListener("click", click, true);
	}

	var restore = e => {
		window.removeEventListener("mouseup", restore, true);
		window.removeEventListener("dragend", restore, true);
		if (e.screenX != x || e.screenY != y)
			return requestAnimationFrame(ret);

		var skip = true;
		if (e.type.startsWith("m")) {
			if (e.ctrlKey) skip = false;
			else if (check()) sip(pn, 0), requestAnimationFrame(set1);
		}
		ret(skip);
	}

	var mousedown = e => {
		if (e.button) return;
		link = e.target.closest(":-moz-any-link[href]");
		if (link) {
			e.ctrlKey && e.preventDefault();
			var w = e.view, sel = w.getSelection();
			sel.isCollapsed || sel.removeAllRanges();

			var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
			link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color"));

			href = link.getAttribute("href");
			link.removeAttribute("href");
			x = e.screenX; y = e.screenY;
			window.addEventListener("mouseup", restore, true);
			window.addEventListener("dragend", restore, true);
		}
	}
	gBrowser.addEventListener("mousedown", mousedown, true);
	window.addEventListener("unload", function unl() {
		window.removeEventListener("unload", unl);
		gBrowser.removeEventListener("mousedown", mousedown, true);
	});
})();

Отсутствует

 

№15207-10-2022 21:01:09

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

Re: Почему-то никак не удаётся заставить его заработать напрямую

austri пишет

надеюсь, что это я напутал что-то

Увы нет, всё сделано правильно.

в итоге ничего не изменилось

Задача заколдована, не иначе.
Всё наверно, что ещё остаётся.


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


То есть, меняем код, например, на такой вариант с логами,
и берём простой случай — клик по «pg-ссылке» на странице с data-адресом (из №147).
Затем, в Консоли браузера, фильтруем сообщения по тексту «[pg]», ПКМ, «Выделить всё», Ctrl+C, и сюда.

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

Выделить код

Код:

(() => {
	var link, href, x, y, cssvar = "--selcolorlocker";

	var LOG = msg => Services.console
		.logStringMessage("[PG] " + Cu.now().toFixed(2) + "  " + msg);

	var sip = Services.prefs.setIntPref;
	var pn = "extensions.tabmix.opentabforLinks";
	var s1 = sip.bind(null, pn, 1);
	var set1 = (...args) => {
		s1(...args)
		LOG("set1(), Set pref to 1, got " + Services.prefs.getIntPref(pn));
	}

	var check = () => {
		LOG('check(), link.className == "pg" is ' + (link.className == "pg"));

		return link.className == "pg";
	}

	var click = e => {
		LOG("click()");

		link.removeEventListener("click", click, true);
		e.preventDefault();
		loadURI(link.href, link.ownerDocument.documentURIObject);
		link = null;
	}
	var ret = skip => {
		LOG("ret(), skip is " + skip);

		link.setAttribute("href", href);
		link.style.removeProperty(cssvar);
		link.getAttribute("style") === "" && link.removeAttribute("style");
		skip ? link = null : link.addEventListener("click", click, true);
	}

	var restore = e => {
		LOG("restore(), " + e.type + " (" + e.screenX + " " + x + ") (" + e.screenY + " " + y + ")");

		window.removeEventListener("mouseup", restore, true);
		window.removeEventListener("dragend", restore, true);
		if (e.screenX != x || e.screenY != y)
			return requestAnimationFrame(ret);

		var skip = true;
		if (e.type.startsWith("m")) {
			if (e.ctrlKey) {
				skip = false;

				LOG("restore(), ctrlKey detected, set skip to false, got " + skip);
			}
			else if (check()) {
				sip(pn, 0);
				requestAnimationFrame(set1);

				LOG("restore(), Set pref to 0, got " + Services.prefs.getIntPref(pn));

				var ensureClick = e => {
					LOG("ensureClick(), pref value is " + Services.prefs.getIntPref(pn));
				}
				window.addEventListener("click", ensureClick, true);
				setTimeout(() => window.removeEventListener("click", ensureClick, true), 300);
			}
			else
				LOG("restore(), not ctrlKey and not check() result, skip is " + skip);
		}
		ret(skip);
	}

	var mousedown = e => {
		if (e.button) return;
		link = e.target.closest(":-moz-any-link[href]");
		if (link) {
			LOG("mousedown(), link detected");

			e.ctrlKey && e.preventDefault();
			var w = e.view, sel = w.getSelection();
			sel.isCollapsed || sel.removeAllRanges();

			var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
			link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color"));

			href = link.getAttribute("href");
			link.removeAttribute("href");
			x = e.screenX; y = e.screenY;
			window.addEventListener("mouseup", restore, true);
			window.addEventListener("dragend", restore, true);
		}
	}
	gBrowser.addEventListener("mousedown", mousedown, true);
	window.addEventListener("unload", function unl() {
		window.removeEventListener("unload", unl);
		gBrowser.removeEventListener("mousedown", mousedown, true);
	});
})();

Отсутствует

 

№15307-10-2022 22:32:55

austri
Участник
 
Группа: Members
Зарегистрирован: 20-01-2009
Сообщений: 162
UA: Firefox 68.0

Re: Почему-то никак не удаётся заставить его заработать напрямую

Затем, в Консоли браузера, фильтруем сообщения по тексту «[pg]»

после фильтрации: в консоли пусто
 
 
about:logo у меня пустая:
- но так полагаю, что это ничего не меняет
- это, видимо, из-за      img {display: none !important;}      в userContent.css
 
 
я уже было хотел закрывать лису и консоль, но ещё просто так потыкал на pg-ссылку (с Ctrl),
и в консоли что-то появилось:
 
[PG] 312051.90  mousedown(), link detected
[PG] 312155.34  restore(), mouseup (992 992) (341 341)
[PG] 312155.40  restore(), ctrlKey detected, set skip to false, got false
[PG] 312155.41  ret(), skip is false
[PG] 312156.15  click()
 
вот на всякий случай повтор (с Ctrl) (при другом запуске лисы):
 
[PG] 57499.12  mousedown(), link detected
[PG] 57594.69  restore(), mouseup (970 970) (342 342)
[PG] 57594.73  restore(), ctrlKey detected, set skip to false, got false
[PG] 57594.74  ret(), skip is false
[PG] 57595.44  click()

Добавлено 07-10-2022 23:01:06
 
 
а может коду не нравится pg?:      return link.className == "pg"
 
вот, я повыписывал то, что сумел вычислить в инспекторе
      (касательно тех зон, в которые попадают все pg-ccылки,
      но не попадают длинные тематические ссылки):
 
 
если ссылка в поисковых результатах:
 
верхний ряд pg-ссылок:
      td.w100.vBottom
      p.small
 
нижний ряд pg-ссылок:
      div#pagination.nav
      div.bottom_info
 
 
если ссылка в каком-то разделе:
 
верхний ряд pg-ссылок:
      div.small
      td.w100.vBottom.pad_2
 
нижний ряд pg-ссылок:
      div#pagination.nav.clearfix
      div.bottom_info.pad_2

Отредактировано austri (07-10-2022 23:01:06)

Отсутствует

 

№15407-10-2022 23:52:56

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

Re: Почему-то никак не удаётся заставить его заработать напрямую

austri пишет

с Ctrl

Это не так интересно, ведь с Ctrl открытие ссылки в активной вкладке работает.
Интереснее лог когда не работает, то есть после простого клика, без Ctrl.
Неужели совсем ничего?

Отсутствует

 

№15508-10-2022 13:04:13

austri
Участник
 
Группа: Members
Зарегистрирован: 20-01-2009
Сообщений: 162
UA: Firefox 68.0

Re: Почему-то никак не удаётся заставить его заработать напрямую

- на странице с data-адресом (из №147)      кликаю на pg-ссылка
 
- открывается следующая (фоновая) вкладка
у которой адрес:      about:logo
и название:      (PNG Image, 300 x 236 pixels)
 
- в консоли: после фильтра по тексту [pg]
стерильная пустота

Отсутствует

 

№15608-10-2022 23:43:13

austri
Участник
 
Группа: Members
Зарегистрирован: 20-01-2009
Сообщений: 162
UA: Firefox 68.0

Re: Почему-то никак не удаётся заставить его заработать напрямую

может ли проблема быть в какой-то настройке из about:config?
 
может ли проблема быть в какой-то настройке из tab-mix-plus?
 
если верно предполагаю, у себя ты проверить не имеешь возможности (клик по pg-ссылке)
      (в поисковых результатах точно нет, раз уж там требуется регистрация,
      но если что - регистрация не нужна, чтобы просто открыть любой раздел)
 
  
я на всякий случай пробовал (безуспешно) лисе подсунуть временный userContent.css,
из которого поубирал почти всё, например:
 

a.pg { text-decoration: none !important; }
             
img {display: none !important;}
           
a:focus {text-decoration: none !important;}
a:hover {text-decoration: none !important;}
           
 
@-moz-document domain(rutracker.org){
a.postLink,
TD.nav.w100[style="padding-left: 8px;"],
            и ещё тут десятки (упоминавшихся ранее) строк
{display: none !important;} }

Отсутствует

 

№15709-10-2022 11:57:27

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

Re: Почему-то никак не удаётся заставить его заработать напрямую

austri пишет

если верно предполагаю, у себя ты проверить не имеешь возможности (клик по pg-ссылке)
      (в поисковых результатах точно нет, раз уж там требуется регистрация,
      но если что - регистрация не нужна, чтобы просто открыть любой раздел)

Ну как, в поиске, конечно, нет, а так проверял.
Не в разделе (viewforum.php), а в топике (viewtopic.php).
И селекторы родительских элементов, которые ты выписал, посмотрел,
всё верно, если нужно уточнить через них, то годятся.


Но это всё неважно.


Раз по клику нет никакого лога совсем, то это значит (значило бы), что
не определяется даже вообще то, что произошёл mousedown на (любой) ссылке.
Но как такое может быть, если выделение в ссылках работает (работает же?),
а оно ведь на этом построено. Совершенно непонятно.


Хотя, есть такая странная мысль.
Вот отсюда (№138) пошла хотелка открывать немногие некоторые
ссылки в активной вкладке.
А в следующем посте я предложил «Вот, попробовал вписать Ctrl, и, для описанных, даже без Ctrl».


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

Отредактировано Dumby (09-10-2022 11:58:47)

Отсутствует

 

№15809-10-2022 14:21:54

austri
Участник
 
Группа: Members
Зарегистрирован: 20-01-2009
Сообщений: 162
UA: Firefox 68.0

Re: Почему-то никак не удаётся заставить его заработать напрямую

если выделение в ссылках работает (работает же?)

ну да
 

произошло недопонимание, и предложенный код был воспринят

в общем, видимо, всё так и произошло (приношу извинение за своё недопонимание)
 
я около часа перепроверял всё, что смог, и пока ничего плохого не обнаружил:
       - текст внутри ссылок выделяется как надо
       - ссылки открываются как надо (двумя способами)
 
у меня в файле click.js (в конце) было вот это:

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

Выделить код

Код:

/*      attempt-2 to obtain:      convenient selection of text in links      */

(() => {
	var link, href, x, y, cssvar = "--selcolorlocker";

	var ret = () => {
		link.setAttribute("href", href);
		link.style.removeProperty(cssvar);
		link.getAttribute("style") === "" && link.removeAttribute("style");
		link = null;
	}
	var restore = e => {
		window.removeEventListener("mouseup", restore, true);
		window.removeEventListener("dragend", restore, true);
		e.screenX != x || e.screenY != y ? requestAnimationFrame(ret) : ret();
	}
	var mousedown = e => {
		if (e.button || e.ctrlKey) return;
		link = e.target.closest(":-moz-any-link[href]");
		if (link) {
			var w = e.view, sel = w.getSelection();
			sel.isCollapsed || sel.removeAllRanges();

			var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
			link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color"));

			href = link.getAttribute("href");
			link.removeAttribute("href");
			x = e.screenX; y = e.screenY;
			window.addEventListener("mouseup", restore, true);
			window.addEventListener("dragend", restore, true);
		}
	}
	gBrowser.addEventListener("mousedown", mousedown, true);
	window.addEventListener("unload", function unl() {
		window.removeEventListener("unload", unl);
		gBrowser.removeEventListener("mousedown", mousedown, true);
	});
})();
 
 
 
 
  
 
 
 
 
 
/*      attempt to add direct opening (in current tab) (after click) of ru-tracker's pages (like: 1 or 2 or 3...)            
        but keep not direct opening (in next back-ground tab) (after click) of ru-tracker's long links      */

(() => {
	var link, href, x, y, cssvar = "--selcolorlocker";

	var LOG = msg => Services.console
		.logStringMessage("[PG] " + Cu.now().toFixed(2) + "  " + msg);

	var sip = Services.prefs.setIntPref;
	var pn = "extensions.tabmix.opentabforLinks";
	var s1 = sip.bind(null, pn, 1);
	var set1 = (...args) => {
		s1(...args)
		LOG("set1(), Set pref to 1, got " + Services.prefs.getIntPref(pn));
	}

	var check = () => {
		LOG('check(), link.className == "pg" is ' + (link.className == "pg"));

		return link.className == "pg";
	}

	var click = e => {
		LOG("click()");

		link.removeEventListener("click", click, true);
		e.preventDefault();
		loadURI(link.href, link.ownerDocument.documentURIObject);
		link = null;
	}
	var ret = skip => {
		LOG("ret(), skip is " + skip);

		link.setAttribute("href", href);
		link.style.removeProperty(cssvar);
		link.getAttribute("style") === "" && link.removeAttribute("style");
		skip ? link = null : link.addEventListener("click", click, true);
	}

	var restore = e => {
		LOG("restore(), " + e.type + " (" + e.screenX + " " + x + ") (" + e.screenY + " " + y + ")");

		window.removeEventListener("mouseup", restore, true);
		window.removeEventListener("dragend", restore, true);
		if (e.screenX != x || e.screenY != y)
			return requestAnimationFrame(ret);

		var skip = true;
		if (e.type.startsWith("m")) {
			if (e.ctrlKey) {
				skip = false;

				LOG("restore(), ctrlKey detected, set skip to false, got " + skip);
			}
			else if (check()) {
				sip(pn, 0);
				requestAnimationFrame(set1);

				LOG("restore(), Set pref to 0, got " + Services.prefs.getIntPref(pn));

				var ensureClick = e => {
					LOG("ensureClick(), pref value is " + Services.prefs.getIntPref(pn));
				}
				window.addEventListener("click", ensureClick, true);
				setTimeout(() => window.removeEventListener("click", ensureClick, true), 300);
			}
			else
				LOG("restore(), not ctrlKey and not check() result, skip is " + skip);
		}
		ret(skip);
	}

	var mousedown = e => {
		if (e.button) return;
		link = e.target.closest(":-moz-any-link[href]");
		if (link) {
			LOG("mousedown(), link detected");

			e.ctrlKey && e.preventDefault();
			var w = e.view, sel = w.getSelection();
			sel.isCollapsed || sel.removeAllRanges();

			var dwu = w.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
			link.style.setProperty(cssvar, dwu.getVisitedDependentComputedStyle(link, "", "color"));

			href = link.getAttribute("href");
			link.removeAttribute("href");
			x = e.screenX; y = e.screenY;
			window.addEventListener("mouseup", restore, true);
			window.addEventListener("dragend", restore, true);
		}
	}
	gBrowser.addEventListener("mousedown", mousedown, true);
	window.addEventListener("unload", function unl() {
		window.removeEventListener("unload", unl);
		gBrowser.removeEventListener("mousedown", mousedown, true);
	});
})();


я заменил всё это на код из сообщения-139, а затем ещё вот это подкорректировал:

Точно, мой косяк. Вместо loadURI(href, нужно loadURI(link.href,

 
- спасибо за твою сообразительность
- по возможности буду стараться поменьше тебя беспокоить, и на данный момент уточню только это:
      есть ли способ? сделать так, чтобы после перезагрузки лисы
      в каждой вкладке (на странице) выделениe текстa сохранялoсь

Отсутствует

 

№15910-10-2022 09:21:34

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

Re: Почему-то никак не удаётся заставить его заработать напрямую

austri пишет

есть ли способ? сделать так, чтобы после перезагрузки лисы
      в каждой вкладке (на странице) выделениe текстa сохранялoсь

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

Отсутствует

 

Board footer

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