|
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
|
|||||||||||
Chrome Extension Можно ли при разработке расширения для Chrome запускать код, взаимодействующий с DOM в фоновом режиме08.02.2025, 23:47. Показов 1561. Ответов 10
Метки нет (Все метки)
Здравствуйте! Интересно, будет ли результат в виде изменения DOM от такой реализации и вообще можно ли так делать или я что-то не понял. Пример взял отсюда:
https://developer.chrome.com/d... tInjection вот пример по ссылке:
У меня пример посложнее - вместо getTitle код изменяет DOM, при этом изменения не происходит. Как у меня - примерно вот так: background.js
0
|
|||||||||||
| 08.02.2025, 23:47 | |
|
Ответы с готовыми решениями:
10
Можно ли обрабатывать страницы сайта используя расширения для google chrome? Как заставить работать кликер на С++ в фоновом режиме в фоновом окне? Можно ли, чтобы программа сама, в фоновом режиме, работала в браузере? |
|
91 / 58 / 14
Регистрация: 16.11.2018
Сообщений: 273
|
||||||
| 09.02.2025, 01:46 | ||||||
|
>> Можно ли ..
Можно только осторожно. Параметр функции .executeScript ... сериализуется в JSON и передается табу там из него создается объект свойство которого func вызывается как функция. Что возвращает?
Парсинг сайта: как получить код страницы в память
1
|
||||||
|
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
|
|||||||
| 09.02.2025, 03:21 [ТС] | |||||||
0
|
|||||||
|
1289 / 1263 / 187
Регистрация: 21.01.2024
Сообщений: 5,807
|
|
| 09.02.2025, 09:55 | |
|
1
|
|
|
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
|
||
| 09.02.2025, 17:58 [ТС] | ||
|
0
|
||
|
1289 / 1263 / 187
Регистрация: 21.01.2024
Сообщений: 5,807
|
||||||
| 09.02.2025, 18:08 | ||||||
|
Вот так вот
А где сказано, что параметр executeScript должен сериализоваться, я не нашел.
1
|
||||||
|
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
|
||||||||||||
| 09.02.2025, 23:49 [ТС] | ||||||||||||
|
Получилось так:
Помимо всего этого, я не понимаю, почему кнопка появляется только при перезагрузке страницы по кнопке браузера "обновить страницу". Событие срабатывает также, когда нажимаются кнопки горизонтального меню внутри страницы (документ меняется только в нижних блоках под горизонтальным меню, сам блок, куда добавляется кнопка остаётся как есть). Это тоже приводит к срабатыванию "chrome.tabs.onUpdated", но кнопка не добавляется после такого. Также кнопка исчезает, если нажать F12, открывая инструменты разработчика. Какие-то "хитрости" здесь должны быть. Интересно, что после того как обновляю страницу по кнопке "обновить", то в консоли убеждаюсь, что метод был вызван столько же раз, сколько я нажимал на вкладки меню. Почему кнопка не добавляется ... Добавлено через 1 час 5 минут Событие дважды срабатывает, кнопка два раза добавляется после прогрузки документа. Магия какая-то... Добавлено через 8 минут Не знаю что такого в манифестации, директория "scripts/modules/" содержит только скрипт с реализованным методом, который ни к какому событию не привязан.
Такое впечатление, что страницу обновляю дважды одновременно, так же не может быть... в системе отладки гугл что-то поломалось.
0
|
||||||||||||
|
91 / 58 / 14
Регистрация: 16.11.2018
Сообщений: 273
|
||
| 10.02.2025, 01:18 | ||
|
Первые предложения по этой ссылке. " The arguments to pass to the provided function. This is only valid if the func parameter is specified. These arguments must be JSON-serializable. " Чуть ниже есть описание для свойcтва func " func void optional Chrome 92+ A JavaScript function to inject. This function will be serialized, and then deserialized for injection. This means that any bound parameters and execution context will be lost. Exactly one of files or func must be specified. The func function looks like: () => {...} " Это просто цитирование справки из приведенной ссылки.
1
|
||
|
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
|
|||||||||
| 10.02.2025, 05:13 [ТС] | |||||||||
|
Когда перезагрузка страницы происходит при нажатии на вкладку меню, кнопка не появляется, в консоли видно, что событие перезагрузки срабатывает, а стоит перезагрузить страницу из функции браузера Chrome - добавляется. И по нажатию на вкладку вот эта штуковина не срабатывает (строка 34 кода js листинга 7-го поста):
Странный эффект.
0
|
|||||||||
|
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
|
|||||||||||
| 10.02.2025, 23:30 [ТС] | |||||||||||
|
Ну я так понимаю, всё дело в задании target.
0
|
|||||||||||
|
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
|
||||||
| 12.02.2025, 02:06 [ТС] | ||||||
|
background.js
Цитата: Внедряет скрипт в целевой контекст. По умолчанию скрипт будет запущен в document_idle или немедленно, если страница уже загружена. Если установлено свойство injectImmediately, скрипт будет внедрен без ожидания, даже если страница не завершила загрузку. Если скрипт оценивается как обещание, браузер будет ждать, пока обещание не будет выполнено, и вернет результирующее значение. "document_idle" В-общем-то неважно, загрузится ли документ окончательно, я в подключаемом скрипте всё-равно отлавливаю изменения DOM, что позволяет точно обнаружить нужный элемент, куда я хочу вставить, то (кнопка) что нужно. Если бы что-то пошло не так - я бы увидел ошибки. Просто не запускается инструкция: chrome.scripting.executeScript. И такой симптом наблюдается для текущей активной вкладки, когда событие обновления происходит по нажатию на кнопку горизонтального меню в этой странице. Событие происходит, в консоли я вижу соответствующий вывод, код выполняется до chrome.scripting.executeScript в вызванном методе addMenuChrome и всё, дальше ничего не происходит, пока не обновишь страницу вручную через стандартную функцию браузера. Документация говорит, что этот механизм аналогичен реализации через content_scripts, для этого правда события можно задать в manifest.json, когда нужно внедрять скрипт. Так тоже пробовал - абсолютно тот же симптом. И учитывая все эти изложенные симптомы, я прихожу к выводу, что скрипт через инструкцию chrome.scripting.executeScript для каждого активного окна, внедряется и отрабатывает единожды при обновлении страницы через стандартную функцию браузера или при переходе по url, и больше эта инструкция в коде не выполняется, если после этого происходит некое событие. Добавлено через 3 часа 41 минуту Я заблуждался, скорее всего, как я полагаю, это всё из-за параллельной прогрузки других ресурсов. Структура страницы сложная, поэтому когда остальные фреймы ещё не прогрузились и запущена процедура добавления элемента (кнопки, чего угодно там) для текущей вкладки (главный фрейм как я полагаю сюда относится), это влияет на добавление элемента в целевой блок. То есть, до тех пор пока не прогрузились остальные ресурсы документ сбрасывается, инициализируется заново и все действия по добавлению сводятся на нет и я это вижу, что элемент исчезает. Как-то всё очень запутанно, с другой стороны, почему составные фреймы влияют на тот, куда они входят. У меня, как видно из кода на 62-й строке идёт проверка окончательной загрузки вкладки. Остальные фреймы, которые в неё входят загружаются следом (исходя из вывода в консоль). Пока не знаю что с этим делать и как это контролировать...
0
|
||||||
| 12.02.2025, 02:06 | |
|
Помогаю со студенческими работами здесь
11
Воспроизведение звука при нажатии на клавиши, при работе программы в фоновом режиме Встраиваемый код и расширения chrome Самопроизвольный запуск Word 2010 в фоновом режиме при загрузке Windows 7
Воспроизвести звук в фоновом режиме. Приложение для ходьбы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|