Ответы пользователя по тегу Расширения для браузеров
  • Как в своём расширении для браузера сделать кнопку вкл/выкл стилей css?

    @zkrvndm
    Софт для автоматизации
    В манифесте расширения укажите путь до контент-скрипта, а также пропишите на каких сайтах контент-скрипт должен запускаться. Через контент скрипт уже можно добавлять на страницу чужого сайта нужные кнопки, например кнопку для включения и выключения своих стилей. Предполагается что базовое знание JavaScript у вас уже есть, умейте ставить обработчики и работать с элементами на странице.
    Ответ написан
  • С помощью какого расширения для браузера Google Chrome можно искать вхождения в его адресной строке?

    @zkrvndm
    Софт для автоматизации
    Вадим Соловьёв, то что вы указали называется параметрами GET-запроса. Для их получения никакие браузерные расширения не нужны. На целевом сайте откройте консоль, это делается комбинацией клавиш Ctrl + Shift + J.

    Уже там в консоли введите следующую команду:
    new URLSearchParams(location.search).get('size');
    И нажмите Enter.

    size - это имя параметра, значение которого вам надо получить, можете заменить на свое.
    Ответ написан
    Комментировать
  • Как выполнить удаленный код на Manifest V3?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Решение найдено. Выполнить удаленный код на Manifest V3 можно следующим образом:

    1. В манифесте расширения прописываем контент-скрипт для нужного вам сайта.

    2. В файле контент-скрипта выполняем вставку тега script со ссылкой src на локальный файл из папки расширения. Это важный момент, на этом этапе нельзя сразу вставить удаленный код, так как расширение просто не даст это сделать ссылаясь на Content Security Policy. Поэтому сначала вставляем скрипт загрузчик, который должен обязательно присутствовать локально внутри с папкой расширения. Не забываем, что для загрузки локального скрипта у вас должны стоят правильные разрешения в манифесте в параметре web_accessible_resources.

    3. Уже внутри этого локального скрипта загрузчика, который мы вставили на этапе 2, можно загрузить удаленный код со своего сервера и вставить его инлайново на страницу. Он будет гарантированно выполнен в контексте страницы словно это родной скрипт сайта. Для кого-то это не важно в каком контексте мы выполняем код, но для меня важно, так как иногда чтобы сгенерировать корректный Event надо это делать именно из контекста страницы.
    Ответ написан
    Комментировать
  • Как синхронно получить Data URL?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Alexandroppolus к сожалению оказалось, что используя XMLHttpRequest нельзя загрузить файл как ArrayBuffer в синхронном режиме, такое возможно только, если запрос идет асинхронно, но мне ни что не мешает скачать файл, как текст, а затем этот текст уже перегнать в Uint8Array при помощи TextEncoder, а дальше уже его конвертировать в Base64 используя код из предложенного тобой плагина.

    Соответственно после такой конвертации получить так желаемый мной Data URL:
    var request = new XMLHttpRequest();
    request.open('GET', '/', false);
    request.send(null);
    
    if (request.status === 200) {
    
    	var type = request.getResponseHeader('Content-Type').split(';')[0].toLowerCase();
    	var u8a = new TextEncoder().encode(request.responseText);
    
    	var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    
    	var bytes = u8a, i, len = bytes.length, base64 = '';
    
    	for (i = 0; i < len; i += 3) {
    		base64 += chars[bytes[i] >> 2];
    		base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
    		base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
    		base64 += chars[bytes[i + 2] & 63];
    	}
    
    	if (len % 3 === 2) {
    		base64 = base64.substring(0, base64.length - 1) + '=';
    	}
    
    	else if (len % 3 === 1) {
    		base64 = base64.substring(0, base64.length - 2) + '==';
    	}
    
    	var data_url = 'data:' + type + ';base64,' + base64;
    
    	console.log(data_url);
    
    }
    
    else {
    	
    	console.log('Ошибка', request);
    	
    }

    Главное, все это работает синхронно и метод можно применять для модификации скриптов сайта на лету через фоновый скрипт своего браузерного расширения, т. е. перехватываем запрос и делаем редирект на Data URL.
    Ответ написан
  • Как сделать простое расширение/пользовательский js для браузера?

    @zkrvndm
    Софт для автоматизации
    Расширение которое будет запускать какой-то код на сайте делает очень просто, другое дело что даже это самое просто мне лично сейчас лень объяснять, да и не до этого пока. Из простых решений рекомендую:
    https://chrome.google.com/webstore/detail/custom-j...
    Это стороннее расширение позволяющие запускать свой код на чужих сайтах.
    Ответ написан
  • Как изменить новую вкладку opera?

    @zkrvndm
    Софт для автоматизации
    Всякий раз когда вы открываете новую вкладку возникает событие onCreated.
    Это событие можно отловить из фонового скрипта background.js
    https://developer.chrome.com/docs/extensions/refer...
    Соответственно, вам ничто не мешает после того, как вы поймали это событие просто сменить URL той вкладки, где произошло событие, на нужный вам адрес.

    Есть вариант еще проще: вам ничто не мешает в настройках самой оперы прописать как стартовую страницу нужный вам адрес и никаких расширений не понадобится.
    Ответ написан
    Комментировать
  • С помощью какого расширения можно визуально подсветить определённые вкладки в браузере Google Chrome?

    @zkrvndm
    Софт для автоматизации
    Открываешь консоль и одной заранее заготовленной командой меняешь фавикон сайта на свой заранее подготовленный фавикон. Твой собственный фавикон может быть любого цвета и формы. Расширения никакие не нужны.

    P. S. Вадим Соловьёв Зайди на любой сайт, открой консоль при помощи комбинации Ctrl + Shift + J.

    Далее просто вставь код ниже и нажми Enter:
    document.querySelector('link[rel*="icon"]').outerHTML = `<link href="data:image/svg+xml;charset=UTF-8,%3Csvg%20%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%3E%3Ccircle%20cx='50'%20cy='50'%20r='50'%20fill='red'%20/%3E%3C/svg%3E" rel="shortcut icon" type="image/svg+xml">`;

    Это поменяет фавикон сайта на красный кружок. Цвет кружка можно менять, просто укажи в коде выше вместо слова red нужны тебе цвет, например green:
    document.querySelector('link[rel*="icon"]').outerHTML = `<link href="data:image/svg+xml;charset=UTF-8,%3Csvg%20%20xmlns='http://www.w3.org/2000/svg'%20width='100'%20height='100'%3E%3Ccircle%20cx='50'%20cy='50'%20r='50'%20fill='green'%20/%3E%3C/svg%3E" rel="shortcut icon" type="image/svg+xml">`;

    6221a7d4f160f274722860.png
    Ответ написан
    2 комментария
  • Как открыть ссылку в новой вкладке с JavaScript?

    @zkrvndm
    Софт для автоматизации
    Имитируй событие contextmenu, а затем уже как обычно открывай это видео через window.open
    Ответ написан
  • Как найти и выбрать элемент внутри кода страницы через JavaScript?

    @zkrvndm
    Софт для автоматизации
    В манифесте расширения в параметрах контент-скрипта укажите "all_frames": true (пример ниже)
    {
    	
    	"name" : "Имя расширения",
    	
    	"manifest_version" : 2,
    	 
    	// ...
    	
    	"content_scripts" : [
    	
    		{	
    			"matches" : [ "https://*.mysite.ru/*" ],
    			"run_at": "document_start",
    			"js" : [ "content.js" ],
    			"all_frames": true
    		}
    		
    	]
    
    }

    Это даст понять браузеру, что контент-скрипт надо запускать в том числе внутри фреймов. Далее, уже в самом контент-скрипте выполняете проверку во фрейме ли вы находитесь и предпринимаете необходимые действия:
    if (window.top != window) {
    	
    	console.log('Это фрейм!');
    	
    }
    
    else {
    	
    	console.log('Это не фрейм!');
    	
    }
    Ответ написан
  • Почему document.write не работает в Firefox?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Спасибо Aetae за подсказанное решение, которое работает в Firefox:
    document.wrappedJSObject.write(''); document.close();

    Если запустить метод из контент-скрипта в своем расширении еще до начала отрисовки DOM, то это позволяет предотвратить запуск скриптов сайта, а далее на страницу уже можно спокойно залить свое содержимое.
    Ответ написан
    Комментировать
  • Как скопировать стили всех тегов в элементе body c помощью spinCSS или тругих плагинов?

    @zkrvndm
    Софт для автоматизации
    Чтобы получить стили всех элементов на странице, надо эти элементы перебрать в цикле и запросить стили по каждому отдельно:
    document.querySelectorAll('*').forEach(function(elem) {
        style = getComputedStyle(elem);
        console.log(style);
    });

    Далее уже собранные стили можно обработать как душе-угодно.
    Ответ написан
  • Chrome extension, как получить экземпляр window контекста "top"?

    @zkrvndm
    Софт для автоматизации
    Выполни свой код не в контексте расширения, а в контексте страницы и будет тебе счастье.
    Ответ написан
    Комментировать
  • Как я могу создать расширение для другого расширения?

    @zkrvndm
    Софт для автоматизации
    Внутри фоновой страницы установите обработчик:
    chrome.tabs.onCreated.addListener(function(tab) {
        console.dir(tab);
    });

    Он будет срабатывать всякий раз, при открытии новой вкладки, соответственно вам ничто не мешает таким образом отслеживать все открываемые вкладки.
    Ответ написан
    Комментировать
  • Как синхронизировать нажатие клавиатуры и мышки в нескольких профилях хрома?

    @zkrvndm
    Софт для автоматизации
    Реализовать это можно на JavaScript, но вам обязательно понадобиться бэкэкенд, чтобы организовать общение между профилями. Присмотритесь к технологии WebSocket:
    https://learn.javascript.ru/websockets
    Ответ написан
    Комментировать
  • Можно ли запретить доступ ко вкладке расширений (chrome://extensions/)?

    @zkrvndm
    Софт для автоматизации
    У расширений есть доступ ко вкладкам, можно отслеживать какая именно вкладка сейчас активна и если надо, закрыть вкладку.
    Ответ написан
    2 комментария
  • Заполнение и отправка формы в точно указанное время, можно ли?

    @zkrvndm
    Софт для автоматизации
    Тут все зависит от маленького нюанса, а именно, что будет если отправить форму на секунду раньше? Форма не отправится? Или отправится, но скидку не получишь?
    Ответ написан
    3 комментария
  • Как ускорить работу если надо одновременно использовать 20 вкладок?

    @zkrvndm
    Софт для автоматизации
    Исправить этот никак нельзя, но можно переделать сам механизм парсинга. Нахрена вам вообще отображать страницу, если вам чисто нужен его html-код? Берете и POST / GET запросом напрямую дергаете информацию и тогда можете парсить хоть в 20 потоков, хоть в 200 потоков.
    Ответ написан
    2 комментария
  • Как расширения хрома проксируют сайты?

    @zkrvndm
    Софт для автоматизации
    Есть бесплатное расширение AdGuard VPN, там можно настраивать на каких сайтах использовать VPN, а на каких нет.
    Ответ написан
    Комментировать
  • Как изменить заголовок страницы до загрузки DOM (расширение Chrome)?

    @zkrvndm
    Софт для автоматизации
    Это конечно можно сделать, но только через костыль. Укажите в манифесте расширения опцию run_at со значением document_start, чтобы ваш контент-скрипт запускался до готовности документа:
    {
    	
    	"name" : "Имя расширения",
    	
    	"manifest_version" : 2,
    	
    	// ............................
    	
    	"content_scripts" : [
    		
    		{	
    			"matches" : [ "https://*.site.ru/*", ],
    			"run_at": "document_start",
    			"js" : [ "content-script.js" ]
    		}
    		
    	]
    	
    }

    Далее в контент-скрипте вызывайте:
    document.write('');
    document.close();

    Это мгновенно перезапишет содержимое страницы пустотой, а дальше делайте с ней (со страницей), что хотите.

    P. S. Зачем вам это нужно, если не секрет? Может другое решение подскажу.
    Ответ написан
    5 комментариев
  • Как через userscripts запретить внедрение JavaScript от сайта?

    @zkrvndm
    Софт для автоматизации
    Вы можете легко переписать скрипты ВКонтакте на свои через контент-скрипт / UserScript, просто объявляете свою функцию и она тупо заменит функцию от ВКонтакте.

    Пример объявления функции test() через контент-скрипт / UserScript:
    var script = document.createElement('script');
    script.innerHTML = `function test() {
        // Ваш код
    }`;
    document.head.appendChild(script);

    Разумеется объявлять надо уже после прогрузки скриптов от ВКонтакте, для этого используйте событие load.

    P. S. Осталось вам лишь найти функцию от ВКонтакте отвечающую за отправку данных) Для этого исследуйте обработчики, которые на кнопке висят при помощи инспектора хрома.
    Ответ написан