Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

Расширение для Chrome, работа с DOM

Ни разу не писал расширение для Хрома. Почитал немного материалы от Гугла. Не сильно помогло, тем более плохо знаю JS.
В общем, что мне нужно. А нужно простое пока действие: открываю сайт, логинюсь, нажимаю на кнопку расширение, активирую его. Расширение периодически по таймеру на этом сайте кликает на Таб в виджете, к которому привязано событие "click", которое дергает ajax запрос и получает данные с сервера и обновляет содержимое Таба. После чего, расширение должно проверить, появилось ли что-то в Табе. Таб - это вкладка в виджете. Если что-то появилось - дергает внешний url.
Как это правильно организовать? Что прописать в манифесте? Как достучаться из расширения к DOM сайта?
В принципе, через devtools кликнутьпо табу могу через: document.getElementsByClassName('tab')[0].click(), как это периодически дергать из расширения?


Ответ

Чтобы достучатся из расширения к DOM сайта, вам нужен контент скрипт (вся работа с DOM ведется там). В манифесте указываете, в какие страницы его загружать, примерно так: manifest.json:
{ /* тут бла-бла-бла имя автора версия и прочие тырыпыры, https://developer.chrome.com/extensions/manifest тут все достаточно подробно описано */ "permissions": [ "http://ваш.сайт.цель/*" ], "content_scripts":[ { "matches": [ "http://ваш.сайт.цель/*" //https://developer.chrome.com/extensions/content_scripts#match-patterns-globs ], "js": ["content_script.js"] } ] }
Чтобы активировать расширение, нажав на кнопку расширение, вам нужен popup: в манифест добавляем
"browser_action":{ "default_popup":"popup.html" },
в теле popup.html напишите код, который будет сохранять куда-либо факт того, что приложение активировано. Тут масса вариантов, насколько я понял вашу задачу, будет достаточно просто посылать сообщение в content_script, примерно так:
popup.html:
Hello Chrome World:)
popup.js
chrome.runtime.sendMessage('start');
content_script.js:
chrome.runtime.onMessage.addListener(function(request,sender,callback){ if(request=='start'){ setInterval(function(){ document.getElementsByClassName('tab')[0].click() },228); } });
Но вы можете сделать это массой других способов, например воспользовавшись chrome.storage.local или background скриптом, который будет работать, пока вы не закроете браузер, удалите или не отключите расширение.

Комментариев нет:

Отправить комментарий