Объявление

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

Administrator

№112606-03-2024 06:35:39

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 72.0

Re: Greasemonkey

Farby пишет

Ultima2m пишет Есть у кого скриптЭто не скрипт, это настройки  Middlemouse.paste

О, спасибо, заработало. А Blink Selected сломали?

Отсутствует

 

№112715-05-2024 22:12:14

leex
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 331
UA: Firefox 125.0

Re: Greasemonkey

Добрый день!
Можно ли в при работающем скрипте в ТамперМанки принудительно скрывать/показывать кнопку созданную определенным скриптом?

Есть прикольный скрипт с закадровым переводом от яндекса.
https://github.com/ilyhalight/voice-over-translation

Встраивается в поддерживаемые браузерные плееры, в том числе и Ютуб.

Но при работающем скрипте, при движении курсора по окну плеера постоянно маячит - то появляясь, то исчезая, кнопка переводчика.
Отвлекает внимание, то она посреди экрана, то сбоку.

Было бы здорово держать эту кнопку скрытой и при необходимости показывать ее.
Например, новой кастомной кнопкой в панели меню справа от адресной строки, или зажатым Ctrl + ПКМ по экрану проигрывателя...
В ТМ можно включить и выключить скрипт, но необходима перезагрузка страницы, на горячую не работает.

Отредактировано leex (16-05-2024 20:27:12)

Отсутствует

 

№112823-05-2024 14:10:14

soll
Участник
 
Группа: Members
Зарегистрирован: 18-03-2014
Сообщений: 114
UA: Firefox 115.0

Re: Greasemonkey

Предлагаю обратиться к автору скрипта, например, на предмет добавления в настройки кнопки появления. не думаю, что он откажет.

Отсутствует

 

№112925-05-2024 03:24:43

leex
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 331
UA: Firefox 126.0

Re: Greasemonkey

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

Отсутствует

 

№113025-05-2024 09:40:37

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

Re: Greasemonkey

leex
Муть, там дело в стиле, а не в скрипте. Стиль в скрипте. Вполне кнопку можно загнать за край экрана или в угол. Я просто не знаю чем разжать не тратя на это уйму времени. Пусть даст несжатый скрипт, или хотя бы стиль из срипта.

Отсутствует

 

№113126-05-2024 17:45:57

leex
Участник
 
Группа: Members
Зарегистрирован: 24-03-2011
Сообщений: 331
UA: Firefox 126.0

Re: Greasemonkey

_zt пишет

Муть, там дело в стиле, а не в скрипте. Стиль в скрипте. Вполне кнопку можно загнать за край экрана или в угол. Я просто не знаю чем разжать не тратя на это уйму времени. Пусть даст несжатый скрипт, или хотя бы стиль из срипта.


Попросил автора несжатый скрипт или стиль.
Отправил пользователь:

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

.vot-segmented-button {
    opacity: 0 !important;
    overflow: visible;
}

.vot-segmented-button:hover {
    opacity: 1 !important;
}

.vot-segmented-button:before {
    content: '';
    position: absolute;
      inset: -150px -200px; // hover size
}

.vot-segment-label {
    display: none;
}

.vot-segmented-button[data-status="error"] .vot-segment-label {
    display: block;
}

Автор написал

в src

скрытый текст
https://github.com/ilyhalight/voice-over-translation/tree/master/src

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

Чтобы не быть испорченным телефоном
https://github.com/ilyhalight/voice-over-translation/issues/606#issuecomment-2132152836

Отредактировано leex (19-06-2024 05:27:31)

Отсутствует

 

№113226-08-2024 19:57:28

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

Re: Greasemonkey

leex
Надо было в личку мне писать. Вам там готовый стиль дали, для stylish.
   
xrun1
Спасибо за обновление для дзена. Ведь смотрел и видел отличие, но не допер link убрать.

Отсутствует

 

№113326-09-2024 02:59:49

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

Re: Greasemonkey

Продублирую скрипт здесь.
Браузеры Edge, Cent, Opera (проверял только эти) копируют картинку по Ctrl+C.
[firefox] по этому сочетанию копирует урл-адрес картинки из адресной строки. Сделал скрипт, который по Ctrl+A --> Ctrl+С копирует картинку, а просто по Ctrl+С только адрес.
Проверял в Tampermonkey.

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

Выделить код

Код:

// ==UserScript==
// @name         Copy image with Ctrl+C (copy)
// @namespace    https://forum.mozilla-russia.org/viewtopic.php?pid=811018#p811018 Firefox Browser
// @version      1.0
// @description  Copy the image from Firefox browser using the keyboard shortcut Ctrl+C
// @author       xrun1
// @match        https://*/*
// @match        file:///*/*
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACAElEQVQ4jcWTPWtUQRSGnzlncvcj2UgMRtj4AcEmEEhhpYViITbapRHSaCF2/gshjX/BRi2CjYUQFFHsLRWRICokQhZiiJq79+49cyzuLnGLgJ0vDAPzDs85M7wH/rfC2sOnvvmjxN0RwDxQ+cgWhAGGIAJm1Hc0QRVY6CTix92SF3M3xqhz2uNS6yVv86vs2Ikjq1dbz4iigaYM0Qm6us3r+fOo5FhqcWXrHdvWrf2/lSCqI8GgGSNNCWQxsjK1jkoOFlDJWZlaJxv6YytGPEB0BcVAEpqg592xQj3vMjH06zb0sAMLSEiJTCIZSiYNnherbPxepQxtNvqrbBQ3acZIRkZLS5ZPr3F5cYX5mVeAEO48eOIfFq4xO/2GTvsLZcrY3Vtmr38Rca+fk5R29o2lM7dpZT1IYNH4tXGX2Gl94sLSfTI5IJliBxWnGk6RT7Ozf53d8hbt9mfOnbyHMqDsA66ECjoT74mt7CtVKLAiUh04RRGociiLfTrlY45PPqJ1bALMSQMwV0JwUnLEnZj/TOTfDRUhVUbZd9KgTlJ7pkFQY9BPECAEJbpjIRESVJUQAcr9VH/rUNpQokGRl2iAFECjQnBSqGGeQLAaADaekdIoR2kbnbmhaQSrd68gdqcW0c02OkqaCWCYgBj1HKgdzgGgCJaM2cmzR8b8n/UHcLLgLSViuSsAAAAASUVORK5CYII=
// @grant        none
// ==/UserScript==

(function() {
  'use strict';
  // получаем адресную строку
  var stringPathName = window.location.pathname;
  // убираем сдвоенные слэши, бывают такие https://www.eurokdj.com//images/singles/c/sin_corona-the_rhythm_of_the_night.jpg
  stringPathName = stringPathName.trim()
    .replace('//', '/');
  // ищем позицию последней точки
  var count = stringPathName.lastIndexOf('.');
  // проверяем, есть точка? длина больше, чем позиция  последней точки?
  if (count <= 0) {
    return;
  } else if (stringPathName.length <= count + 1) {
      return;
  }
  // получаем расширение
  var img_ext = stringPathName.substring(count + 1);
  // список допустимых расширений
  const array_images = ['bmp', 'gif', 'ico','jpeg', 'jpg', 'png', 'svg', 'webp']; // gif - копируется текущий кадр; svg не работает, можно убрать
  // есть полученное расширение в списке?
  if (!array_images.includes(img_ext)) return;

// код скопирован отсюда ==>> https://openjavascript.info/2022/09/27/how-to-copy-an-image-to-the-clipboard-with-vanilla-javascript/ <<==
  const img = new Image();
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');

  // Ctrl+A
  var ctrl_a = false;
  document.addEventListener('keydown', function(event) {
    if (event.code == 'KeyA' && (event.ctrlKey || event.metaKey)) {
      if (!ctrl_a) ctrl_a = true;
    }
  });
  // Ctrl+C
  document.addEventListener('keydown', function(event) {
    if (event.code == 'KeyC' && (event.ctrlKey || event.metaKey)) {
        if (ctrl_a) {
          event.preventDefault();
          copyToClipboard(stringPathName);
        } else {
          alertTimeout("Only the link was copied!", 1000, "blue");
          navigator.clipboard.writeText(window.location);
        }
    }
  });
  // снимаем выделение кликом в любом месте и убираем признак, что Ctrl+A нажато
  document.addEventListener('click', function(event) {
    ctrl_a = false;
  });

  // Ждём нажатия Ctrl+C
  // document.addEventListener('copy', function(event) {
  //  copyToClipboard(stringPathName);
  //});

  function writeToCanvas(src) {
    return new Promise((res, rej) => {
      img.src = src;
      img.onload = function() {
        canvas.width = img.naturalWidth;
        canvas.height = img.naturalHeight;
        ctx.drawImage(img,0,0)
        canvas.toBlob((blob) => {
          res(blob);
        }, 'image/png');
      }
    });
  }

  async function copyToClipboard(src) {
    const image = await writeToCanvas(src);
    try {
      await navigator.clipboard.write([
         new ClipboardItem({
           [image.type]: image,
         })
      ]);
//      console.log("Success");
      alertTimeout("Successful image copying!", 1000, "blue");
    } catch(err) {
      console.log("Copy failed: " + err);
    }
  }

    // Выводит сообщение об успешном копировании; неуспешное запишется в лог консоли (теоретически...)
    function alertTimeout(mymsg, mysecs, mybgcolor) {
    var myelement = document.createElement("div");
    var L_msg = window.innerWidth/2 - 100;
    var T_msg = window.innerHeight/2 - 15;
    myelement.setAttribute("style","background-color: " + mybgcolor + "; color: white; width: 200px; height: 30px; position: fixed; left: " + L_msg + "px;" +
                           "top: " + T_msg + "px; margin: auto; border: 1px solid #ffd700; font-family: verdana; font-size: 12px; display: flex;" +
                           "align-items: center; justify-content: center; text-align: center; opacity: 0.6; z-index: 99999;");
    myelement.innerHTML = mymsg;
    document.body.appendChild(myelement);
    setTimeout(function() {
      myelement.parentNode.removeChild(myelement);
    }, mysecs);
  }
})();

Отредактировано xrun1 (28-10-2024 09:11:01)

Отсутствует

 

№113428-09-2024 14:08:49

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 81
UA: Firefox 130.0

Re: Greasemonkey

xrun1 не тестил, но на http://*/* navigator.clipboard работать не будет

Отсутствует

 

№113528-09-2024 17:13:52

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

Re: Greasemonkey

dinn пишет

работать не будет

Спасибо, Вы правы, упустил этот момент.

Отсутствует

 

№113628-09-2024 17:28:39

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 81
UA: Firefox 130.0

Re: Greasemonkey

xrun1 можно вкрутить GM.setClipboard. Вроде в новой версии идет уже из короби, т.е. не нужно прописки через @grant, либо как-то в скрипте задействовать doCommand("cmd_copy")

Отсутствует

 

№1137Вчера 12:36:32

Northtech
Участник
 
Группа: Members
Зарегистрирован: 16-04-2011
Сообщений: 272
UA: Firefox 138.0

Re: Greasemonkey

Можно ли поправить старый скрипт Alternative search engines 2? Работает только в бинге.

Выделить код

Код:

// ==UserScript==
// @name        Alternative search engines 2
// @description Adds search on other sites for google, bing, yandex, nigma, wolfram-alpha and ru-wiki
// @namespace   2k1dmg@userscript
// @license     GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
// @version     0.0.3
// @grant       none
// @run-at      document-start
// @noframes
// @include     /^https?://yandex\.(ru|ua|by|kz|com|com\.tr)/.*$/
// @include     /^https?://www\.google\.(ru|com|by|kz|com\.ua|com\.tr|am|az|ee|fi|ge|kg|lt|lv|md|tm|co\.uz|de)/.*$/
// @include     /^https?://www\.bing\.com/.*$/
// @include     /^https?://duckduckgo\.com/.*$/
// ==/UserScript==

// 2015-04-05

var SEARCH_ON = 'Искать на:';
var POSITION = 'left';

var ENGINES = {
	Yandex: 'https://yandex.ru/yandsearch?text=',
	Google: 'https://www.google.com/search?q=',
	Bing: 'https://www.bing.com/search?q=',
	DuckDuckGo: 'https://duckduckgo.com/?q=',
	Wikipedia: 'https://ru.wikipedia.org/w/index.php?search=',
	WolframAlpha: 'http://www3.wolframalpha.com/input/?i='
};

var PLACEHOLDER_SELECTORS = [
	'.content__left', // yandex
	'#resultStats', // google
	'.sb_count', // bing
	'#links_wrapper' // duckduckgo
].join(',');

var INPUT_FIELD_SELECTORS = [
	'.input__control', // yandex
	'#lst-ib', // google
	'#sb_form_q', // bing
	'#search_form_input' // duckduckgo
].join(',');

var addCSSStyle = function() {
	var cssStyle = document.createElement('style');
	cssStyle.type = 'text/css';
	cssStyle.textContent = [
		'#oeid {',
		'	display: inline-block;',
		'	padding-right: 10px;',
		'	padding-bottom: 3px;',
		'	color: rgb(115, 115, 115);' ,
		'	font-family: Calibri,sans-serif;',
		'	font-size: 11px;',
		'	text-align: left;',
		'	z-index: 10000;',
		'}'
	].join('\n');
	document.head.appendChild(cssStyle);
};

var onDOMLoad = function() {
	var results = document.querySelector(PLACEHOLDER_SELECTORS);
	if (!results) {
		return;
	}
	var div = document.getElementById('oeid');
	if (div) {
		return;
	}

	div = document.createElement('div');
	div.id = 'oeid';
	addCSSStyle();
	results.insertBefore(div, results.firstChild);

	var links = [];
	for (var engine in ENGINES) {
		links.push('<a href="javascript:void(0)">' + engine + '</a>');
	}
	div.innerHTML = '<b>' + SEARCH_ON + '</b> ' + links.join(', ');

	div.onclick = function(event) {
		var link = event.target;
		if (link.nodeName.toLowerCase() !== 'a')
			return;
		var engine = ENGINES[link.textContent];
		var param = '';
		if (Array.isArray(engine)) {
			param = engine[1];
			engine = engine[0];
		}
		var q = document.querySelector(INPUT_FIELD_SELECTORS);
		if (engine && q && q.value.length > 0) {
			window.open(engine + encodeURIComponent(q.value) + param);
		}
	};
};

var addObserver = function(target, config, callback) {
	var observer = new MutationObserver(function(mutations) {
		mutations.forEach(function(mutation) {
			callback.call(this, mutation);
		});
	});
	observer.observe(target, config);
	return observer;
};

var removeObserver = function(observer) {
	observer.disconnect();
};

var getNodes = function() {
	var trg = document.body;
	var params = { childList: true, subtree: true };
	var getNode = function(mut) {
		var addedNodes = mut.addedNodes;
		var nodes = Array.slice(addedNodes);
		nodes.forEach(function(node) {
			if (node.querySelector &&
					node.querySelector(PLACEHOLDER_SELECTORS)) {
				onDOMLoad();
			}
		});
	};
	var observer = addObserver(trg, params, getNode);
	window.addEventListener('unload', function(event) {
		removeObserver(observer);
	}, false);
};

document.addEventListener('DOMContentLoaded', function() {
	onDOMLoad();
	getNodes();
}, false);

Отсутствует

 

№1138Вчера 14:51:13

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1169
UA: Seamonkey 2.49

Re: Greasemonkey

Northtech

Выделить код

Код:

var PLACEHOLDER_SELECTORS = [
	'.main__center', // yandex
	'#center_col', // google
	'.sb_count', // bing
	'.react-results--main' // duckduckgo
].join(',');

var INPUT_FIELD_SELECTORS = [
	'.input__control', // yandex
	'#APjFqb', // google
	'#sb_form_q', // bing
	'#search_form_input' // duckduckgo
].join(',');

Только "http://www3.wolframalpha.com" уже не существует. Наверное, стоит заменить на "https://www.wolframalpha.com"

Отредактировано yup (Вчера 15:20:43)

На форуме

 

№1139Вчера 17:18:24

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

Re: Greasemonkey

yup
Что в том, что в этом, на яндексе, нажатие на скриптовые ссылки не дает результатов.

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

Выделить код

Код:

// ==UserScript==
// @name        Alternative search engines 2
// @description Adds search on other sites for google, bing, yandex, duckduckgo and ru-wiki
// @namespace   2k1dmg@userscript
// @license     GPL version 3 or any later version; http://www.gnu.org/licenses/gpl.html
// @version     0.2.5
// @grant       none
// @noframes
// @icon        data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAaVBMVEUAAABBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeFBaeGr9xyCAAAAI3RSTlMA/gzNEQjfmxz1xr5gQeauo4BULyvVinYm7rWllnJKOiTzbFlNSDMAAACiSURBVBjTVc5JDsMgEETRasBMBs/znNz/kGnkOFLeBvVXLQDrTD/rNeJRO3O0cZir7HvrzlZ92VpZImldJ3Qe1tekigbMbAgFj/MBbw+mI3bJb2VgSQBwE1oKiI73ZDkUJzASkQEUKQ5lDS7pRtODHQXna+uATO5ISi9snE6bVfL+mVh0UBCNlL6+C4IkR3rMBsoFbupSaet/5emeFvwRufwAXtMHARXQZIsAAAAASUVORK5CYII=
// @include     https://yandex.tld/*
// @include     https://www.google.tld/*
// @include     https://www.bing.com/*
// @include     https://duckduckgo.com/*
// @exclude     /^https://(yandex|www\.google)\.(net|org)/.*$/
// ==/UserScript==

// 2022-01-29

var SEARCH_ON = '• ';
var SEARCH_ON_END = ' •';
var LINK_BOX_ID = 'oeid-box';
var ENGINES_SEPARATOR = ' • ';
var POSITION = 'left';

var ENGINES = {
	Yandex: 'https://yandex.ru/yandsearch?text=',
	Google: 'https://www.google.com/search?q=',
	Bing: 'https://www.bing.com/search?q=',
	DuckDuckGo: 'https://duckduckgo.com/?q=',
	Wikipedia: 'https://ru.wikipedia.org/w/index.php?search='
};

var PLACEHOLDER_SELECTORS = [
	'.content__left', // yandex
	'#result-stats', // google
	'.sb_count', // bing
	'.results--main' // duckduckgo
].join(',');

var INPUT_FIELD_SELECTORS = [
	'.input__control', // yandex
	'input.gLFyf', // google
	'#sb_form_q', // bing
	'#search_form_input' // duckduckgo
].join(',');

function onClick(event) {
	var link = event.target;
	if(link.nodeName.toLowerCase() !== 'a')
		return;
	var engineSource = ENGINES[link.engineName];
	var engineURL;
	var engineParam = '';
	if(Array.isArray(engineSource)) {
		engineParam = engineSource[1];
		engineURL = engineSource[0];
	}
	else if(typeof engineSource === 'string') {
		engineURL = engineSource;
	}
	else {
		return;
	}
	var searchText = document.querySelector(INPUT_FIELD_SELECTORS);
	if(engineURL && searchText && searchText.value.length > 0) {
		var url = engineURL + encodeURIComponent(searchText.value) + engineParam;
		window.open(url, '_blank');
	}
}

function addCSSStyle() {
	var cssStyle = document.createElement('style');
	cssStyle.type = 'text/css';
	cssStyle.textContent = [
		'#' + LINK_BOX_ID + ' {',
		'	display: inline-block;',
		'	padding: 0 10px 15px 10px;',
		'	color: rgb(204,204,234);',
		'	background-color: inherit;',
		'	font-family: Verdana;',
		'	font-size: 11px;',
		'	text-align: ' + POSITION + ';',
		'	z-index: 99999;',
		'}',
		'#' + LINK_BOX_ID + ' > a {',
		'	text-decoration: none;',
		'}'
	].join('\n');
	document.head.appendChild(cssStyle);
}

var createFragment = (function() {
	var setCommon = function(node, sAttr, reason) {
		var aAttr = sAttr.split(',');
		aAttr.forEach(function(attr) {
			var attrSource = /:=/.test(attr) ? attr.split(':=') : [attr, ''];
			var attrName = attrSource[0].trim();
			var attrValue = attrSource[1].trim().replace(/^(['"])([^\1]*)\1$/, '$2');
			if(reason === 'a') {
				node.setAttribute(attrName, attrValue);
			}
			else {
				node[attrName] = attrValue;
			}
		});
		return node;
	};
	var setAttr = function(node, sAttr) {
		return setCommon(node, sAttr, 'a');
	};
	var setProp = function(node, sAttr) {
		return setCommon(node, sAttr, 'p');
	};
	var createFragmentInner = function(data, fragment) {
		if(data.n) {
			var node = document.createElement(data.n);
			if(data.a)
				node = setAttr(node, data.a);
			if(data.p)
				node = setProp(node, data.p);
			if(data.s)
				node.style.cssText = data.s;
			fragment.appendChild(node);
		}
		if(data.c) {
			data.c.forEach(function(cn) {
				createFragmentInner(cn, node || fragment);
			});
		}
		if(data.t && node) {
			node.appendChild(document.createTextNode(data.t));
		}
		if(data.tc) {
			fragment.appendChild(document.createTextNode(data.tc));
		}
		if(data.dn) {
			fragment.appendChild(data.dn);
		}
		return fragment;
	};
	return function(data) {
		var fragment = document.createDocumentFragment();
		return createFragmentInner({c:data}, fragment);
	};
})();

function createLinkBox() {
	return createFragment([
		{n:'div',a:'id:="'+LINK_BOX_ID+'"',c:(function() {
			var domain = document.domain;
			var aLinks = [{tc:SEARCH_ON}];
			for(var engine in ENGINES) {
				if(domain.indexOf(engine.toLowerCase()) !== -1)
					continue;
				aLinks.push(
					{n:'a',a:'href:="javascript:void(0)"',p:'engineName:="'+engine+'"',t:engine},
					{tc:ENGINES_SEPARATOR}
				);
			}
			aLinks[aLinks.length-1] = {tc:SEARCH_ON_END};
			return aLinks;
		})()}
	]);
}

function onDOMLoad() {
	var results = document.querySelector(PLACEHOLDER_SELECTORS);
	if(!results)
		return;
	if(document.getElementById(LINK_BOX_ID))
		return;
	addCSSStyle();
	var fragment = createLinkBox();
	var linkBox = fragment.querySelector('#'+LINK_BOX_ID);
	linkBox.onclick = onClick;
	results.insertBefore(fragment, results.firstChild);
}

function addObserver(target, config, callback) {
	var observer = new MutationObserver(function(mutations) {
		mutations.forEach(function(mutation) {
			callback.call(this, mutation);
		});
	});
	observer.observe(target, config);
	return observer;
}

function removeObserver(observer) {
	observer.disconnect();
}

function getNodes() {
	var _slice = Array.slice || Function.prototype.call.bind(Array.prototype.slice);
	var trg = document.body;
	var params = { childList: true, subtree: true };
	var getNode = function(mut) {
		var addedNodes = mut.addedNodes;
		var nodes = _slice(addedNodes);
		nodes.forEach(function(node) {
			if(node.querySelector &&
					node.querySelector(PLACEHOLDER_SELECTORS)) {
				onDOMLoad();
			}
		});
	};
	var observer = addObserver(trg, params, getNode);
	window.addEventListener('unload', function(event) {
		removeObserver(observer);
	}, false);
}

onDOMLoad();
getNodes();

Отсутствует

 

№1140Вчера 17:35:12

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

Re: Greasemonkey

В выдаче результатов 1-й оригинал (v.0.3.2) и второй старенький (v.0.2.1) мод для Alternative search engines 2
https://greasyfork.org/ru/scripts?filte … ngines%202

Отсутствует

 

№1141Вчера 19:03:21

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

Re: Greasemonkey

Второй- на яндексе не кликабельно, а на ddg нет ссылок, первый работает, но на ddg надо подобрать новый класс или id, #zero_click_wrapper например.

Отредактировано _zt (Вчера 19:19:20)

Отсутствует

 

№1142Вчера 20:34:09

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1169
UA: Seamonkey 2.49

Re: Greasemonkey

_zt пишет

Что в том, что в этом, на яндексе, нажатие на скриптовые ссылки не дает результатов.

Странно. У меня что тогда в процессе редактирования, что сейчас на Яндексе всё работает.


Единственное что: тогда я на Яндекс попадал, нажимая ссылки, добавленные скриптом, и не обратил внимание на список доменов в заголовке скрипта, потому когда сейчас зашёл непосредственно на Яндекс, не получил там строку со ссылками.


Чтобы она была, нужно в заголовок добавить строку

Выделить код

Код:

// @include     /^https?://ya\.(ru|ua|by|kz|com|com\.tr)/.*$/

Может, у Вас что-то противоЯндексное (скрипт или расширение) вмешивается?

Отредактировано yup (Вчера 20:42:08)

На форуме

 

№1143Вчера 21:22:11

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 81
UA: Firefox 138.0

Re: Greasemonkey

_zt пишет

Что в том, что в этом, на яндексе, нажатие на скриптовые ссылки не дает результатов.

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

Выделить код

Код:

Content-Security-Policy: The page’s settings blocked an inline script (script-src-elem) from being executed because it violates the following directive: “script-src 'self' 'unsafe-inline' 'unsafe-eval' https://yandex.ru https://*.yandex.ru https://yastat.net https://yastatic.net https://*.yastatic.net https://yandex.net https://*.yandex.net https://ya.ru https://*.ya.ru 'nonce-...==' https://mc.yandex.com”
Source: javascript:void(0)

Отсутствует

 

№1144Вчера 23:07:07

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1169
UA: Seamonkey 2.49

Re: Greasemonkey

dinn пишет

(script-src-elem) from being executed because it violates the following directive:

Это несложно преодолеть, но тогда немного изменится поведение ссылок - сейчас при щелчке по ссылке открывается другой поисковик, и в нём ищется то, что написано в строке поиска на исходной странице, а после изменения новый поисковик получит для поиска не текущий текст, а тот, который искал предыдущий поисковик.


Думаю, что написанное выше не очень понятно, поэтому поясняю: если я открыл Гугл, запустил поиск слова "бабушка", а на странице с полученными бабушками вместо "бабушка" вписал "дедушка" и щёлкнул по ссылке на Bing, то нынешний вариант откроет Bing с поиском слова "дедушка", а переделанный - "бабушка".


Устраивает?


Или... Или попробуйте строку

Выделить код

Код:

links.push('<a href="javascript:void(0)">' + engine + '</a>');

изменить на

Выделить код

Код:

links.push('<a href="">' + engine + '</a>');

Полученный результат будет нарушать стандарт HTML, но раньше Firefox на подобные ссылки не ругался, нормально их отрабатывал.


А ещё почему-то Google сейчас выдаёт мне не такую структуру страницы, как днём, и в ней больше нет элемента '#center_col'. Зато есть '#scc' - можно его использовать.

Отредактировано yup (Вчера 23:32:56)

На форуме

 

№1145Сегодня 01:54:52

dinn
Участник
 
Группа: Members
Зарегистрирован: 28-09-2024
Сообщений: 81
UA: Firefox 138.0

Re: Greasemonkey

yup, как ты преодолеваешь csp сайта - скриптом, расширением или встроенной фишкой, которая, например, есть в tampermonkey? Удаляешь заголовок или модифицируешь?
Посмотрел еще раз на яндексе. Непонятно как работает его CSP. После клика пишет, что скрипт заблочен, а на самом деле нет, а ссылки не кликабельны, потому что надо подобрать правильный селектор. У меня, например, нет .input__control. Может меняется или зависит от того, какие яндекс скрипты разрешены

Отсутствует

 

№1146Сегодня 02:03:36

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

Re: Greasemonkey

Нет смысла старье править, 0.3.2 у меня работает везде, если id для ddg исправить. Он еще и компактнее 0.2.5, видимо лишнее повыкидывали.
   
Добавлено Сегодня 02:08:33
xrun1 выше ссылку дал

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

Выделить код

Код:

var PLACEHOLDER_SELECTORS = [
	'.content__left', // yandex
	'.content__left', // ya
	'#center_col',/*'#result-stats',*/ // google
	'.sb_count', // bing
	'#zero_click_wrapper'/*.results--main*/ // duckduckgo
].join(',');

var INPUT_FIELD_SELECTORS = [
	'.HeaderForm-Input', // yandex
	'.HeaderForm-Input', // ya
	'textarea.gLFyf', // google
	'#sb_form_q', // bing
	'#search_form_input' // duckduckgo
].join(',');


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

Отредактировано _zt (Сегодня 02:11:05)

Отсутствует

 

№1147Сегодня 04:09:06

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1169
UA: Seamonkey 2.49

Re: Greasemonkey

dinn пишет

как ты преодолеваешь csp сайта - скриптом, расширением или встроенной фишкой, которая, например, есть в tampermonkey?

Если это вопрос об обсуждаемом скрипте, то никак- у меня же не Firefox, а Iceape, здесь этой проблемы нет.


Посмотрел еще раз на яндексе. Непонятно как работает его CSP. После клика пишет, что скрипт заблочен, а на самом деле нет

Насколько я понимаю (и надеюсь), скрипт, о котором в консоли в сообщении о блокировке написано, это "void(0)" - пустышка,  нужная только для того, чтобы у <a> в "href" что-то было (для соответствия стандарту). Поэтому для начала стоит проверить вариант без href вообще. (Без href курсор над ссылкой не будет в палец превращаться, но это не принципиально и может быть исправлено с помощью CSS.)


У меня, например, нет .input__control.

А какой класс (стиль) у поля ввода? Это же легко посмотреть.


_zt пишет

Нет смысла старье править, 0.3.2 у меня работает везде, если id для ddg исправить.

У обеих версий и массивы селекторов идентичны, и "javascript:void(0)" в href. Так что все проблемы и исправления абсолютно одинаковые.


'#center_col',/*'#result-stats',*/ // google

#center_col - это на google.com. На google.ru структура странички другая (и даже сама страничка визуально отличается). Там нужно цепляться к #scc.


'textarea.gLFyf', // google

На google.com это поле - <textarea id="APjFqb" class="gLFyf">.
А на google.ru - <input class="noHIxc">.

Отредактировано yup (Сегодня 04:19:57)

На форуме

 

№1148Сегодня 06:16:48

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

Re: Greasemonkey

yup
Да все так. Добавил google.ru, теперь на обоих google в строке оба google присутствуют. А вот яндекс.com так просто не откроешь. :)
Вопрос вот в чем - где там проверка и как в нее .com/.ru включить?
https://greasyfork.org/ru/scripts/8928-alternative-search-engines-2
   

Добавлял так

Выделить код

Код:

var ENGINES = [
	['Yandex', 'https://yandex.ru/yandsearch?text='],
	['Ya', 'https://ya.ru/yandsearch?text='],
	['Google.com', 'https://www.google.com/search?q='],
	['Google.ru', 'https://www.google.ru/search?q='],
	['Bing', 'https://www.bing.com/search?q='],
	['DuckDuckGo', 'https://duckduckgo.com/?q='],
	['Wikipedia', 'https://ru.wikipedia.org/w/index.php?search=']
];

var PLACEHOLDER_SELECTORS = [
	'.content__left', // yandex
	'.content__left', // ya
	'#center_col', // google.com
	'#scc', // google.ru
	'.sb_count', // bing
	'#zero_click_wrapper' // duckduckgo
].join(',');

var INPUT_FIELD_SELECTORS = [
	'.HeaderForm-Input', // yandex
	'.HeaderForm-Input', // ya
	'textarea.gLFyf', // google.com
	'textarea.noHIxc', // google.ru
	'#sb_form_q', // bing
	'#search_form_input' // duckduckgo
].join(',');

Отредактировано _zt (Сегодня 06:21:33)

Отсутствует

 

№1149Сегодня 13:59:12

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1169
UA: Seamonkey 2.49

Re: Greasemonkey

_zt пишет

Добавил google.ru, теперь на обоих google в строке оба google присутствуют. А вот яндекс.com так просто не откроешь.

Открыть (с некоторыми ухищрениями) можно, но вот тут-то и обнаруживаются два неприятных факта:


  1. Селекторы у yandex.com свои собственные. А нынешний код скрипта не позволяет различать yandex.com и yandex.ru.


    Но даже если это преодолеть, то в итоге получим в строке ссылок два Гугла и три Яндекса. Стоит ли её так захламлять, или стоит переделать скрипт так, чтобы для каждого "семейства" добавлялась только одна ссылка?

  2. В разных браузерах (Iceape и Firefox) я получаю разную структуру странички Яндекса. Очень сильно разную. И нужные селекторы оказываются разными. А значит, логику скрипта нужно ещё больше менять, чтобы позволять для одного и того же сайта иметь альтернативные наборы селекторов.


    Зато с Гуглом обратная картина: вчера я на google.com и google.ru получал разную структуру странички, а сегодня она одинаковая (во всех браузерах).


Пока что массивы для версии 0.3.2 и для не очень свежего Firefox получаются такими:

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

Выделить код

Код:

var ENGINES = [
	['Ya', 'https://ya.ru/yandsearch?text='],
	['Yandex', 'https://yandex.ru/yandsearch?text='],
	['Yandex', https://yandex.com/yandsearch?text='],
	['Google', 'https://www.google.ru/search?q='],
	['Bing', 'https://www.bing.com/search?q='],
	['DuckDuckGo', 'https://duckduckgo.com/?q=']
];

var PLACEHOLDER_SELECTORS = [
	'.main__center', // ya  .content__left не встречал нигде, даже в стилях
	'.main__center', // yandex.ru
	'#categories', // yandex.com
	'#center_col', // google
	'.sb_count', // bing
	'#react-duckbar' // duckduckgo  или .react-results--main как раньше
].join(',');
 
var INPUT_FIELD_SELECTORS = [
	'input.HeaderForm-Input', // ya
	'input.HeaderForm-Input', // yandex.ru
	'#q', // yandex.com
	'#APjFqb', // google
	'#sb_form_q', // bing
	'#search_form_input' // duckduckgo
].join(',');


Вопрос вот в чем - где там проверка и как в нее .com/.ru включить?

Если я правильно понял вопрос, то проверка там такая: if(engine[0].toLowerCase() == domain)
А domain = document.domain.split('.').splice(-2, 2)[0];
То есть, скрипт не TLD отбрасывает, а тупо выделяет вторую с конца часть доменного имени. И в результате для "google.com.tr" или  "google.com.ua" он получит не "google", а "com".

Отредактировано yup (Сегодня 14:52:37)

На форуме

 

Board footer

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