Форум программистов, компьютерный форум, киберфорум
JavaScript: API
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287

Расширение для Яндекс браузера

06.01.2025, 08:35. Показов 7061. Ответов 107
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте не уверен, что в ту ветку пишу, посему уважаемы модераторы можете перезалить топик в нужную ветку
Предположим в буфере обмена находится текст:
«тема письма*I:\ТЗ.txt*8111@mail.ru, 8222@mail.ru»
То есть в буфере находятся тема письма, путь к файлу, который нужно приложить к письму и емейл адрес или адреса разделённые запятой, куда нужно отправить письмо или письма.
Задача: пользователь заходит в Яндекс браузер в свой почтовый ящик, нажимает кнопку «Написать» и всё то, что имеется в буфере обмена нужно, чтобы автоматически сделалось – заполнились поля: Кому, Тема и приложился указанный файл, чтобы осталось пользователю только нажать кнопку «Отправить», как это сделать?
То есть я захожу в свою почту, нажимаю кнопку «Написать» - это событие, ПО должно проверить есть ли в буфере обмена строка удовлетворяющая требованиям, в данном случае наличие двух знаков "*", если есть, тогда действовать согласно требуемого сценария
видимо нужно написать расширение для браузера, чтобы поддерживало Яндекс браузер или уже есть готовые? Попытался использовать Violentmonkey, установил, создал скрипт

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// ==User Script==
 
// @name         Auto Fill Yandex Mail
 
// @namespace    http://tampermonkey.net/
 
// @version      0.1
 
// @description  Автоматически заполняет поля в Яндекс Почте из буфера обмена
 
// @author       Ваше имя
 
// @match        https://mail.yandex.ru/*
 
// @grant        clipboardRead
 
// ==/User Script==
 
 
(function() {
 
    'use strict';
 
 
    // Добавляем слушатель события на кнопку "Написать"
 
    document.addEventListener('click', async function(event) {
 
        if (event.target.classList.contains('mail-ComposeButton')) {
 
            try {
 
                // Получаем текст из буфера обмена
 
                const text = await navigator.clipboard.readText();
 
 
 
                // Проверяем наличие двух знаков "*"
 
                if (text.split('*').length - 1 === 2) {
 
                    const parts = text.split('*');
 
                    const emailSubject = parts[0]; // Тема письма
 
                    const filePath = parts[1]; // Путь к файлу (не используется в этом примере)
 
                    const emailAddresses = parts[2]; // Емейлы
 
 
                    // Заполняем поля "Кому" и "Тема"
 
                    document.querySelector('input[name="to"]').value = emailAddresses;
 
                    document.querySelector('input[name="subject"]').value = emailSubject;
 
 
                    // Здесь можно добавить логику для прикрепления файла, если это необходимо
 
                    console.log("Поля заполнены!");
 
                } else {
 
                    console.log("Содержимое буфера обмена не удовлетворяет требованиям.");
 
                }
 
            } catch (err) {
 
                console.error("Ошибка при доступе к буферу обмена: ", err);
 
            }
 
        }
 
    });
 
})();
но получил сообщение от расширения "Неверный скрипт! Безымянный" и чтобы Не гадать, лучше спросить, спасибо
и почему он Безымянный, когда сказано: @name Auto Fill Yandex Mail
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2025, 08:35
Ответы с готовыми решениями:

Возможно ли на javascript создать расширение для браузера, которое бы авторизовывалось в vk?
Возможно ли на javascript создать расширение для браузера (chrome,firefox,opera), которое бы авторизовывалось в vk?

"Управляемое" расширение для браузера
Хочу написать "управляемое"(внешней программой) расширение. Под "управлением" понимаю некий "костыль", т.к. нормальная...

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

107
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
06.01.2025, 16:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
как копировать в буфер обмена
Я копировал из твоего первого поста.
1
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,146
Записей в блоге: 14
06.01.2025, 17:00
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
«тема письма*I:\ТЗ.txt*8111@mail.ru, 8222@mail.ru»
если есть готове данные в таком формате, лучше использовать какой то серверный/десктопный язык программирования и smtp сервер или yandex mail api, или использовать кликер для автоматизации работы с интерфейсом программ

потому что доступ к файлу из браузера выполняется только через стандартные диалоговые окна, за исключением экспериментальных v8 api
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
06.01.2025, 18:42  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Как это выглядит у меня - смотри скриншот. Активная мордочка - желтая.
а понял, работает
и в буфере должно быть
тема письма*I:\ТЗ.txt*8111@mail.ru, 8222@mail.ru
или
"тема письма*I:\ТЗ.txt*8111@mail.ru, 8222@mail.ru"
без разницы, разобьёт по знаку "*" - это понятно
спасибо))
то есть техника работает - гут
только как минимизировать количество телодвижений?
ещё ведь и не приатачилось как изменить
// Здесь можно добавить логику для прикрепления файла, если это необходимо??
и ещё чтобы именно работало по нажатию кнопки Написать? сразу вставилось и был зер гут?

Добавлено через 3 минуты
Цитата Сообщение от mr_dramm Посмотреть сообщение
если есть готове данные в таком формате
есть, находятся в буфере обмена
по секрету - их туда помещает приложение Ворда))
Цитата Сообщение от mr_dramm Посмотреть сообщение
лучше использовать какой то серверный/десктопный язык программирования и smtp сервер или yandex mail api, или использовать кликер для автоматизации работы с интерфейсом программ
если не сложно - есть пример?

Добавлено через 50 минут
пока колдуны на отдыхе, озадачил джипити
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// ==UserScript==
 
// @name         Auto Fill Yandex Mail
 
// @namespace    http://tampermonkey.net/
 
// @version      0.3
 
// @description  Автоматически заполняет поля в Яндекс Почте из буфера обмена
 
// @author       Ваше имя
 
// @match        https://mail.yandex.ru/*
 
// @grant        none
 
// ==/UserScript==
 
 
(function() {
 
    'use strict';
 
 
    // Добавляем слушатель события на документ
 
    document.addEventListener('click', async function(event) {
 
        // Проверяем, является ли нажатый элемент кнопкой "Написать"
 
        if (event.target.classList.contains('mail-ComposeButton')) {
 
            const text = prompt("Введите данные в формате: Тема*Путь к файлу*Емейлы");
 
            if (text && text.split('*').length === 3) {
 
                const parts = text.split('*');
 
                const emailSubject = parts[0]; // Тема письма
 
                const filePath = parts[1]; // Путь к файлу
 
                const emailAddresses = parts[2]; // Емейлы
 
 
                // Находим поля "Кому" и "Тема" с помощью более общих селекторов
 
                const toField = document.querySelector('input[name="to"], [data-name="to"]'); // Поле "Кому"
 
                const subjectField = document.querySelector('input[name="subject"], [data-name="subject"]'); // Поле "Тема"
 
 
                if (toField && subjectField) {
 
                    toField.value = emailAddresses; // Заполняем поле "Кому"
 
                    subjectField.value = emailSubject; // Заполняем поле "Тема"
 
                    console.log("Поля заполнены!");
 
 
                    // Прикрепляем файл, если путь указан
 
                    if (filePath) {
 
                        const fileInput = document.querySelector('input[type="file"]');
 
                        if (fileInput) {
 
                            try {
 
                                const response = await fetch(filePath);
 
                                const blob = await response.blob();
 
                                const file = new File([blob], filePath.split('/').pop());
 
                                const dataTransfer = new DataTransfer();
 
                                dataTransfer.items.add(file);
 
                                fileInput.files = dataTransfer.files;
 
                                console.log("Файл прикреплен!");
 
                            } catch (error) {
 
                                console.error("Ошибка при прикреплении файла: ", error);
 
                            }
 
                        } else {
 
                            console.error("Поле для прикрепления файла не найдено.");
 
                        }
 
                    }
 
                } else {
 
                    console.error("Не удалось найти поля для ввода.");
 
                }
 
            } else {
 
                console.log("Содержимое не удовлетворяет требованиям.");
 
            }
 
        }
 
    });
 
})();
не работает, хотя комменты по теме, кто-то сможет подправить?
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
06.01.2025, 18:45
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
только как минимизировать количество телодвижений?
Если есть способ читать буфер обмена, то можно, конечно, отследить появление формы и ввести в нее данные, но я не знаю такого способа. По поводу вложений на страничке какая-то сложная логика, тут я не смогу помочь.
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
по секрету - их туда помещает приложение Ворда))
А браузер использовать принципиально? Может другими программными средствами лучше? Все-таки отправка письма - не такая сложная задача на любом языке и примеры в сети имеются.
1
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
06.01.2025, 19:29  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Может другими программными средствами лучше?
самое простое отправлять с самого Ворда, как - я знаю, но есть две засады
1 файл может быть занят другим процессом и письмо уйдёт без вложения
2 в папке Отправленные не будет следов отправки
такие дела))

Добавлено через 35 минут
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
отправлять
ещё можно выделить файл и нажать в меню Отправить, но по телодвижениям тоже не гут, снасала выбрать из приложений Почта, OneNote или WhatsApp
отправил через Почта не получилось........
0
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
07.01.2025, 07:38  [ТС]
здравствуйте, день новый наступил...
Следую строго сабжу - Расширение для Яндекс браузера
Создаю своё:
Создать новую папку для расширения, например: my_extension
extension = расширение popup = неожиданно возникнуть
Внутри этой папки создать следующие файлы:
manifest.json - определяет основные параметры расширения
popup.html - описывает интерфейс расширения
popup.js - описывает функциональность расширения
popup.css - описывает стили расширения
Открыть Яндекс Браузер и перейти по адресу chrome://extensions
Включить режим разработчика (Developer mode)
Нажать на кнопку "Загрузить распакованное" (Load unpacked) и выбрать папку с расширением
Можно добавить иконку в папку расширения с именем, например: icon.png - эта иконка будет использоваться для отображения расширения в браузере

Сейчас избавлюсь от необходимости передавать инфу от ворда в расширение через буфер обмена, отпишусь и продолжим...продолжим, потому как чувствую сам НЕ справлюсь))
0
Заблокирован
07.01.2025, 09:56
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Открыть Яндекс Браузер и перейти по адресу chrome://extensions
Это для любого браузера с движком Chromium. Даже для Оперы и Microsoft Edge. Только у мазилы это не сработает.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
07.01.2025, 16:00
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
файл может быть занят другим процессом и письмо уйдёт без вложения
Ну, если он занят, то и браузер к нему доступ получить не сможет. Так что, какая разница?
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
в папке Отправленные не будет следов отправки
такие дела))
Разве? Это ведь то же самое, что и отправка с помощью почтового клиента. Ну тут можно, конечно, посмотреть, что отправляет браузер и воспроизвести, но тут придется тогда и авторизацию реализовывать, ну или куки из браузера копировать.)) У яндекса вроде API есть, но я не в курсе что там можно.
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
ещё можно выделить файл и нажать в меню Отправить, но по телодвижениям тоже не гут, снасала выбрать из приложений Почта, OneNote или WhatsApp
отправил через Почта не получилось........
Ну можно, вообще-то открыть ссылку типа mailto:..., тогда должен открыться почтовый клиент по умолчанию с уже введенными данными, но вложения все равно придется добавлять вручную.
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Расширение для Яндекс браузера
Создаю своё
Какие проблемы оно сможет решить?
1
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
11.01.2025, 21:00  [ТС]
сорри, diadiavova, спасибо за ответ, был немного занят))
Цитата Сообщение от diadiavova Посмотреть сообщение
Ну, если он занят, то и браузер к нему доступ получить не сможет. Так что, какая разница?
занят то он с точки зрения ворда и это по-моему НЕ приговор, с помощью других средств вероятней можно отправлять
Цитата Сообщение от diadiavova Посмотреть сообщение
Разве? Это ведь то же самое, что и отправка с помощью почтового клиента.
да, я речь веду про CDO = Collaboration Data Objects, но там можно и по другому, но я вероятней не вывезу в том числе и потому, что почтовики добавляют всё новые настройки, за ними НЕ успеть
Цитата Сообщение от diadiavova Посмотреть сообщение
Какие проблемы оно сможет решить?
когда там только то, что сам наваял, то ты и рулишь и твори, а когда подстраиваешься под имеющееся то - сапоги в смятку
сейчас у меня в джава скрипте, то что навяало мне по моему запросу джипити:
JavaScript
1
2
3
4
5
6
7
8
        // Ждём загрузки DOM
        document.addEventListener('DOMContentLoaded', () => {
        const writeButton = document.querySelector('.compose-button'); // Замените селектор на правильный
        if (writeButton) {writeButton.addEventListener('click', () => {
            alert('Кнопка "Написать" нажата!');});}
        else
            {alert('Кнопка "Написать" не найдена!');}
        });
не работает, более всего напрягает, то что я говорю джипити, что я не знаю нужный селектор, а он талдычит мне - Замените селектор на правильный, а ведь хочу, чтобы расширение это само нашло тем более, что со временем его имя может измениться))
пока получаю алерт Кнопка "Написать" не найдена!, ноя ведь её вижу и нажимал
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
11.01.2025, 23:33
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
занят то он с точки зрения ворда и это по-моему НЕ приговор, с помощью других средств вероятней можно отправлять
Занят он обычно на уровне системы, так что вряд ли. Если какое-то приложение работает с файлом, то другое к нему доступа не имеет(есть нюансы, но в данном случае это не важно).
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
когда там только то, что сам наваял, то ты и рулишь и твори, а когда подстраиваешься под имеющееся то - сапоги в смятку
Ну так в скрипте тоже что сам наваял. Хоть там и есть ограничения, но проблема-то не в них в основном.
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
не работает, более всего напрягает, то что я говорю джипити, что я не знаю нужный селектор, а он талдычит мне - Замените селектор на правильный, а ведь хочу, чтобы расширение это само нашло тем более, что со временем его имя может измениться))
Ну как оно тебе найдет то, что нужно тебе? Для поиска селектора можно воспользоваться средствами разработчика. Наводишь курсор на интересующий элемент, открываешь контекстное меню и в яндекс-браузере выбираешь "Исследовать элемент". Далее тебе откроется панель разработчика с деревом элементов, в которой будет выделен выбранный тобой. Тут уже можно навести курсор на этот элемент, выбрать в контекстном меню копирование и там есть подменю с выбором того, что именно нужно скопировать, в твоем случае это CSS-селектор. Можно искать с помощью выражений XPath, там есть возможность искать элемент по содержимому, например по надписи "Написать", но стопроцентно надежного способа, учитывающего все возможные изменения не существует. Например, если завтра "написать" будет представлено картинкой, то даже поиск по тексту ничего не даст. На данный момент поиск ссылки с текстом написать можно выполнить так
JavaScript
1
document.evaluate("//a[normalize-space(.)='Написать']", document).iterateNext()
Это выражение вернет соответствующий элемент a

Добавлено через 8 минут
Ципихович Эндрю, еще кое что. Страница скорей всего отправляет на сервер форму. Попробуй отправить письмо с вложением и посмотри что браузер туда шлет и попробуй такую же форму сформировать но без страницы. Если это будет делаться из браузера, то с куками проблем быть не должно. А вот модифицировать страницу будет непросто, поскольку там разобраться куда и как они пихают вложения будет ну уж совсем трудно. Правда с вложениями я не уверен, что даже API расширений предоставляет возможность загрузки файла из системы просто по имени файла. По-моему это запрещено. Только через элемент input[type='file']. Разве что где то в системе будет еще работать приложение, которое будет взаимодействовать с расширением.
1
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
12.01.2025, 09:59  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
открываешь контекстное меню и в яндекс-браузере выбираешь "Исследовать элемент"
ок
это клик ПКМ на кнопке "Написать" и выбрать из меню "Исследовать элемент"
а потом в меню выбрать "Копировать элемент" и будет скопировано:
HTML5
1
<a href="#compose" class="Button2 Button2_type_link Button2_view_action Button2_size_m ComposeButton-m__containerContent--sPX6v" aria-disabled="false" role="button"><span class="ComposeButton-m__btnText--ZnUxS">Написать</span></a>
то есть кнопка с class'ом ComposeButton-m__btnText--ZnUxS?
то есть будет:
JavaScript
1
2
3
4
5
6
7
8
// Ждём загрузки DOM
        document.addEventListener('DOMContentLoaded', () => {
        const writeButton = document.querySelector('ComposeButton-m__btnText--ZnUxS'); // Заменён селектор на правильный
        if (writeButton) {writeButton.addEventListener('click', () => {
            alert('Кнопка "Написать" нажата!');});}
        else
            {alert('Кнопка "Написать" не найдена!');}
        });
так?
опробовал пока alert('Кнопка "Написать" не найдена!')
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
12.01.2025, 10:48
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
а потом в меню выбрать "Копировать элемент"
Почему копировать элемент? Там есть подменю, где можно выбрать что именно нужно скопировать. Тебе нужен селектор, вот и выбирай селектор.
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
то есть кнопка с class'ом ComposeButton-m__btnText--ZnUxS?
то есть будет:
Ну если даже и так, то в селекторе перед классом точка должна стоять. Но так можно что-то другое найти. Такой класс есть много где. Если тебе нужен именно span, ну попробуй такой селектор a[href='#compose']>span

Добавлено через 7 минут
А вообще, кликнуть скорее ссылку надо, так что лучше просто a[href='#compose']. Ну и опять-таки выше я написал вариант с XPath выражением, оно вообще по тексту ищет. То есть третью строку своего кода замени на
JavaScript
1
const writeButton = document.querySelector("a[href='#compose']"); // Заменён селектор на правильный
или
JavaScript
1
const writeButton = document.evaluate("//a[normalize-space(.)='Написать']", document).iterateNext(); // Заменён селектор на правильный
1
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
12.01.2025, 11:00  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
А вообще, кликнуть скорее ссылку надо, так что лучше просто a[href='#compose']. Ну и опять-таки выше я написал вариант с XPath выражением, оно вообще по тексту ищет. То есть третью строку своего кода замени на
что то нифига
JavaScript
1
2
3
4
5
6
7
8
9
10
// Ждём загрузки DOM
        document.addEventListener('DOMContentLoaded', () => {
        //const writeButton = document.querySelector('ComposeButton-m__btnText--ZnUxS'); // Заменён селектор на правильный
        const writeButton = document.querySelector("a[href='#compose']"); // Заменён селектор на правильный
        //const writeButton = document.evaluate("//a[normalize-space(.)='Написать']", document).iterateNext(); // Заменён селектор на правильный
        if (writeButton) {writeButton.addEventListener('click', () => {
            alert('Кнопка "Написать" нажата!');});}
        else
            {alert('Кнопка "Написать" не найдена!');}
        });
оба варианта пробовал
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
12.01.2025, 11:08
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
оба варианта пробовал
Этот код должен находиться в контент-скрипте, который запускается для этой страницы, то есть в манифесте должен быть указан шаблон адреса страницы для него.
1
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
12.01.2025, 11:59  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
в манифесте должен быть указан шаблон адреса страницы для него
сейчас его текст у меня:
Code
1
2
3
4
5
6
7
8
9
10
11
12
{
  "manifest_version": 3,
  "name": "EDDS ZGO",
  "description": "ЕДДС ЗГО",
  "version": "1.0",
  "action": {
  "default_popup": "popup.html",
  "default_icon": {
      "16": "А.png",
      "48": "А.png",
      "128": "А.png"}}
}
и как он должен измениться?
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
12.01.2025, 13:14
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
и как он должен измениться?
Примерно так
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "manifest_version": 3,
    "name": "EDDS ZGO",
    "description": "ЕДДС ЗГО",
    "version": "1.0",
    "action": {
        "default_popup": "popup.html",
        "default_icon": {
            "16": "А.png",
            "48": "А.png",
            "128": "А.png"
        }
    },
    "content_scripts": [
        {
            "matches": [
                "https://mail.yandex.ru/*"
            ],
            "js": [
                "content-script.js"
            ]
        }
    ]
}
Причем content-script.js - это адрес скрипта относительно манифеста. Название файла может быть другим, в манифесте должно быть реальное имя файла. И вот именно в этом файле и нужно писать этот код. Чтобы понять, что файл выполняется при загрузке страницы можно из него вывести на консоль что-нибудь и проверить появится текст в консоли. Если да, значит все сделал правильно и можно уже реальный код пробовать.
1
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
12.01.2025, 16:23  [ТС]
чуть в строну))
в связи с тем что после нажатия кнопки "Написать" курсор автоматически встаёт в поле "Кому" и тогда как туда поместить нужные емейлы - имеется ввиду как реализовать это в самописном Яндекс расширении?

Добавлено через 14 минут
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
поле "Кому"
исследовал элемент:
HTML5
1
<div contenteditable="true" spellcheck="false" is="x-bubbles" class="composeYabbles" data-selection="true" data-class-bubble="yabble-compose js-yabble" data-separator="" id="compose-field-1" title="Кому" aria-label="Кому" role="textbox" aria-controls=":a11y-compose-listbox" aria-expanded="false" aria-activedescendant=""></div>
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
12.01.2025, 18:46
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
в связи с тем что после нажатия кнопки "Написать" курсор автоматически встаёт в поле "Кому" и тогда как туда поместить нужные емейлы - имеется ввиду как реализовать это в самописном Яндекс расширении?
Я ведь раньше уже приводил пример. Только там это делалось с помощью скрипта в виолентманки, а сейчас нужно то же самое сделать в контент-скрипте. Единственная оговорка, что если это делается по нажатии кнопки "Написать", то сначала нужно дождаться появления формы. Проще всего это сделать с помощью setTimeout(). Ну, а если говорить о более надежном способе, то, по всей видимости нужно будет использовать MutationObserver, поскольку форма создается скриптом.
Ну то есть, если все совместить, то получится что-то такое
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Ждём загрузки DOM
        document.addEventListener('DOMContentLoaded', () => {
        //const writeButton = document.querySelector('ComposeButton-m__btnText--ZnUxS'); // Заменён селектор на правильный
        const writeButton = document.querySelector("a[href='#compose']"); // Заменён селектор на правильный
        //const writeButton = document.evaluate("//a[normalize-space(.)='Написать']", document).iterateNext(); // Заменён селектор на правильный
        if (writeButton) {writeButton.addEventListener('click', () => {
setTimeout(function(){
            try {
                // Получаем текст из буфера обмена
                const text = prompt("Введите данные");
                // Проверяем наличие двух знаков "*"
                if (text.split('*').length - 1 === 2) {
                    const parts = text.split('*');
                    const emailSubject = parts[0]; // Тема письма
                    const filePath = parts[1]; // Путь к файлу (не используется в этом примере)
                    const emailAddresses = parts[2]; // Емейлы
                    // Заполняем поля "Кому" и "Тема"
                    document.querySelector('#compose-field-1').textContent = emailAddresses;
                    document.querySelector('input[name="subject"]').value = emailSubject;
                    // Здесь можно добавить логику для прикрепления файла, если это необходимо
                    console.log("Поля заполнены!");
                } else {
                    console.log("Содержимое буфера обмена не удовлетворяет требованиям.");
                }
            } catch (err) {
                console.error("Ошибка при доступе к буферу обмена: ", err);
            }
 
}, 1000);            
 
alert('Кнопка "Написать" нажата!');});}
        else
            {alert('Кнопка "Написать" не найдена!');}
        });
Здесь мы секунду ждем до появления формы и выполняем тот код. Есил не хватит секунды, можно увеличить время ожидания.
1
1705 / 574 / 74
Регистрация: 10.04.2009
Сообщений: 9,287
13.01.2025, 17:44  [ТС]
diadiavova, сейчас я получаю сообщение
Цитата Сообщение от diadiavova Посмотреть сообщение
Кнопка "Написать" не найдена!
так после осмысления алгоритма её ведь НЕ нужно искать, я же говорил алгоритм изменился
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
в связи с тем что после нажатия кнопки "Написать" курсор автоматически встаёт в поле "Кому" и тогда как туда поместить нужные емейлы
-хотябы)) для затравки, аппетит может возрасти во время еды))
то есть кнопку искать не наго человек глазами найдёт и руками нажмёт её, как в таком случае будет код, спасибо
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
13.01.2025, 20:41
Ципихович Эндрю, вот смотри прямо сейчас попробовал вот такой код
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    const writeButton = document.querySelector("a[href='#compose']"); // Заменён селектор на правильный
    const text = "тема письма*I:З.txt*8111@mail.ru, 8222@mail.ru";
    if (writeButton)
    {
      writeButton.addEventListener('click', () =>
      {
        setTimeout(function ()
        {
          if (text.split('*').length - 1 === 2)
          {
            const parts = text.split('*');
            const emailSubject = parts[0]; // Тема письма
            const filePath = parts[1]; // Путь к файлу (не используется в этом примере)
            const emailAddresses = parts[2]; // Емейлы
            document.querySelector('#compose-field-1').textContent = emailAddresses;
            document.querySelector('input[name="subject"]').value = emailSubject;
            console.log("Поля заполнены!");
          }
          else
          {
            console.log("Содержимое буфера обмена не удовлетворяет требованиям.");
          }
        }, 3000);
      });
    }
    else
    {
      alert('Кнопка "Написать" не найдена!');
 
    }
Вставил его в консоль, выполнил, после этого нажал кнопку написать. Появилась форма и в нее вставились данные из кода. Что еще нужно?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2025, 20:41
Помогаю со студенческими работами здесь

Расширение для Браузера
Дарова народ, я тут решил попробовать создать расширения для Браузера(Опера GX, если так важно). Но ни как не получается реализовать...

Расширение для браузера
у меня есть расширение просто файлом js идёт оно для гугла хрома и мазилы но его может стырить любой желающий тут я стал переделывать под...

Расширение для браузера(Цензура)
Дарова народ, я тут клепаю расширение для браузера(Цензура), однако мне нужно использовать нейросеть(к сожалению это обязательная часть)...

Расширение-автоклик для браузера
Привет! Я в программировании на JavaScript новичек. Мне нужно сделать расширение для браузера, которое на определённом сайте при нажатии к...

Расширение для браузера, возможности
Посдкажите, возможно ли в принципе реализовать следующий функционал на JS в рамках расширения для браузера (например, для Хрома). От...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru