Расширение google chrome для почты
Всем привет! Нужно написать расширение для google chrome. Функционал расширения: когда пользователь на сайте mail.ru нажимает кнопку "отправить" письмо пользователю, домен которого не принадлежит организации (@vtb.uk), то отправление должно перехватить окно, на котором находится предупреждение об отправке на чужой домен с кнопками «отмена» и “отправить» и только потом отменяло/отправляло письмо. Не прошу Вас за меня все делать. Просто хочу узнать с чего можно начать, какие файлы требуются для этого и что в них должно быть, и как прикрепить триггер именно на кнопку "Отправить".
|
Ну условно скрипт такой:
{ const org = '@vtb.uk'; addEventListener('click', (event) => { const isSendButton = event.target.closest('<селекторы для кнопки отправить>'); if (!isSendButton) return; const addressNodes = document.querySelectorAll('<селекторы для полей ввода адреса>'); const isValid = Array.from(addressNodes, (addressNode) => addressNode.textContent || addressNode.value) .flatMap((addressList) => addressList.trim().split(/[,;\s]+/)) .every((address) => !address || address.endsWith(org)); if (isValid) return; const isConfirmed = confirm('Отправить на чужой домен?'); if (isConfirmed) return; event.preventDefault() event.stopImmediatePropagation() event.stopPropagation() }, true); } Кладём его в content.js расширения для домена почты и готово. Тестировать можно просто в консоли руками. |
А расскажите поподробнее в какой консоли я могу это протестить, а то совсем нулевой в JS. Закинул этот код в content.js и выставил селектора ('body > div:nth-child(1) > div > div.compose-app.compose-app_fix.compose-app_popup.compose-app_window.compose-app_adaptive > div > div > div > div.footer--2dyxG > div.buttonsPonyMode--2zujD > div:nth-child(1) > div > button'). Закинул в manifest.json вот этот код:
Код:
{ |
run_at лучше "document_start".
Селекторы содержащие всякие 2dyxG и 2zujD - это плохо, данные кракозябры - это сгенерированые имена, они точно изменятся при следующем обновлении со стороны сайта и у вас всё перестанет работать. Селекторы содержащие :nth-child() - тоже не очень хорошо, порядок может поменяться в любой момент. Желательно найти какие-то более-менее статические и уникальные условия к которым можно привязаться. Консоль в браузере открывается по f12. Туда можете вставить код и исполнить. И весь и чисто получение по селектору. Больше можно сказать только зайдя на мыло mail(которого у меня нет) и проверив всё руками. М.б. кто-то другой с этим вам поможет или сами разберётесь. Понаставьте везде console.log и следите что там при клике. |
Спасибо огромное. Упустил ваше решение из виду. Вот немного исправленный рабочий код, вдруг кому-нибудь повезет заниматься таким же.
{ const org = '@вашдомен'; addEventListener('click', (event) => { const isSendButton = event.target.closest('[tabindex="570"]'); if (!isSendButton) return; const tooltipElement = document.querySelector('[class^="tooltip-"][data-test-id^="tooltip-operand-"]'); const tooltipId = tooltipElement.getAttribute('data-test-id'); const emailMatch = tooltipId.match(/tooltip-operand-(.+)$/); const email = emailMatch[1]; if (email.indexOf(org) === -1) { const isConfirmed = confirm('Отправить на чужой домен?'); if (isConfirmed) return; } else { return; } event.preventDefault() event.stopImmediatePropagation() event.stopPropagation() }, true); } |
Часовой пояс GMT +3, время: 04:16. |