Добрый день!
Можно ли в при работающем скрипте в ТамперМанки принудительно скрывать/показывать кнопку созданную определенным скриптом?
Есть прикольный скрипт с закадровым переводом от яндекса.
https://github.com/ilyhalight/voice-over-translation
Встраивается в поддерживаемые браузерные плееры, в том числе и Ютуб.
Но при работающем скрипте, при движении курсора по окну плеера постоянно маячит - то появляясь, то исчезая, кнопка переводчика.
Отвлекает внимание, то она посреди экрана, то сбоку.
Было бы здорово держать эту кнопку скрытой и при необходимости показывать ее.
Например, новой кастомной кнопкой в панели меню справа от адресной строки, или зажатым Ctrl + ПКМ по экрану проигрывателя...
В ТМ можно включить и выключить скрипт, но необходима перезагрузка страницы, на горячую не работает.
Отредактировано leex (16-05-2024 20:27:12)
Отсутствует
leex
Муть, там дело в стиле, а не в скрипте. Стиль в скрипте. Вполне кнопку можно загнать за край экрана или в угол. Я просто не знаю чем разжать не тратя на это уйму времени. Пусть даст несжатый скрипт, или хотя бы стиль из срипта.
Отсутствует
Муть, там дело в стиле, а не в скрипте. Стиль в скрипте. Вполне кнопку можно загнать за край экрана или в угол. Я просто не знаю чем разжать не тратя на это уйму времени. Пусть даст несжатый скрипт, или хотя бы стиль из срипта.
Попросил автора несжатый скрипт или стиль.
Отправил пользователь:
.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
Отредактировано leex (19-06-2024 05:27:31)
Отсутствует
Продублирую скрипт здесь.
Браузеры Edge, Cent, Opera (проверял только эти) копируют картинку по Ctrl+C. по этому сочетанию копирует урл-адрес картинки из адресной строки. Сделал скрипт, который по 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)
Отсутствует
Можно ли поправить старый скрипт 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);
Отсутствует
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)
На форуме
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();
Отсутствует
В выдаче результатов 1-й оригинал (v.0.3.2) и второй старенький (v.0.2.1) мод для Alternative search engines 2
https://greasyfork.org/ru/scripts?filte … ngines%202
Отсутствует
Что в том, что в этом, на яндексе, нажатие на скриптовые ссылки не дает результатов.
Странно. У меня что тогда в процессе редактирования, что сейчас на Яндексе всё работает.
Единственное что: тогда я на Яндекс попадал, нажимая ссылки, добавленные скриптом, и не обратил внимание на список доменов в заголовке скрипта, потому когда сейчас зашёл непосредственно на Яндекс, не получил там строку со ссылками.
Чтобы она была, нужно в заголовок добавить строку
Может, у Вас что-то противоЯндексное (скрипт или расширение) вмешивается?
Отредактировано yup (Вчера 20:42:08)
На форуме
Что в том, что в этом, на яндексе, нажатие на скриптовые ссылки не дает результатов.
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)
Отсутствует
(script-src-elem) from being executed because it violates the following directive:
Это несложно преодолеть, но тогда немного изменится поведение ссылок - сейчас при щелчке по ссылке открывается другой поисковик, и в нём ищется то, что написано в строке поиска на исходной странице, а после изменения новый поисковик получит для поиска не текущий текст, а тот, который искал предыдущий поисковик.
Думаю, что написанное выше не очень понятно, поэтому поясняю: если я открыл Гугл, запустил поиск слова "бабушка", а на странице с полученными бабушками вместо "бабушка" вписал "дедушка" и щёлкнул по ссылке на Bing, то нынешний вариант откроет Bing с поиском слова "дедушка", а переделанный - "бабушка".
Устраивает?
Или... Или попробуйте строку
изменить на
Полученный результат будет нарушать стандарт HTML, но раньше Firefox на подобные ссылки не ругался, нормально их отрабатывал.
А ещё почему-то Google сейчас выдаёт мне не такую структуру страницы, как днём, и в ней больше нет элемента '#center_col'. Зато есть '#scc' - можно его использовать.
Отредактировано yup (Вчера 23:32:56)
На форуме
yup, как ты преодолеваешь csp сайта - скриптом, расширением или встроенной фишкой, которая, например, есть в tampermonkey? Удаляешь заголовок или модифицируешь?
Посмотрел еще раз на яндексе. Непонятно как работает его CSP. После клика пишет, что скрипт заблочен, а на самом деле нет, а ссылки не кликабельны, потому что надо подобрать правильный селектор. У меня, например, нет .input__control. Может меняется или зависит от того, какие яндекс скрипты разрешены
Отсутствует
Нет смысла старье править, 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)
Отсутствует
как ты преодолеваешь csp сайта - скриптом, расширением или встроенной фишкой, которая, например, есть в tampermonkey?
Если это вопрос об обсуждаемом скрипте, то никак- у меня же не Firefox, а Iceape, здесь этой проблемы нет.
Посмотрел еще раз на яндексе. Непонятно как работает его CSP. После клика пишет, что скрипт заблочен, а на самом деле нет
Насколько я понимаю (и надеюсь), скрипт, о котором в консоли в сообщении о блокировке написано, это "void(0)" - пустышка, нужная только для того, чтобы у <a> в "href" что-то было (для соответствия стандарту). Поэтому для начала стоит проверить вариант без href вообще. (Без href курсор над ссылкой не будет в палец превращаться, но это не принципиально и может быть исправлено с помощью CSS.)
У меня, например, нет .input__control.
А какой класс (стиль) у поля ввода? Это же легко посмотреть.
Нет смысла старье править, 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)
На форуме
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)
Отсутствует
Добавил google.ru, теперь на обоих google в строке оба google присутствуют. А вот яндекс.com так просто не откроешь.
Открыть (с некоторыми ухищрениями) можно, но вот тут-то и обнаруживаются два неприятных факта:
Но даже если это преодолеть, то в итоге получим в строке ссылок два Гугла и три Яндекса. Стоит ли её так захламлять, или стоит переделать скрипт так, чтобы для каждого "семейства" добавлялась только одна ссылка?
Зато с Гуглом обратная картина: вчера я на 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".
Ну и в конце там ещё отдельно if(domain == 'duckduckgo')
Отредактировано yup (Сегодня 14:22:16)
На форуме