Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1

Greasemonkey не работает getElementById

16.03.2016, 18:10. Показов 2325. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Банальный пример:
JavaScript
1
document.getElementById("content").style.backgroundColor = 'red';
Запускаю скрипт вручную, все ок, цвет меняется. В Greasemonkey не пашет - видимо, не находит элемент. Подскажите, пожалуйста, в чем может быть причина? Гугл весь перерыл, ничего толком не нашел. Другие скрипты, типа алертов, или смена фона всего документа, работают. Проблема именено в обращении к элементам.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2016, 18:10
Ответы с готовыми решениями:

не работает userscript (GreaseMonkey)
Собственно создал вот такой скрипт function func() { alert( 'Привет' ); } setTimeout(func, 1000); если мы его запускаем в...

Document.getElementById не работает
Добрый день! document.getElementById не работает! в таблице несколько строк генерируются <td><input type=text...

Document.getElementById('name').ckeced не работает в IE
Всем доброго дня. Столкнулся с такой проблемой: в IE для checkbox не работает проверка document.getElementById('name').ckeced. Проблема...

13
 Аватар для madzal
54 / 54 / 40
Регистрация: 22.08.2014
Сообщений: 424
16.03.2016, 18:57
возможно элемент создаётся динамически или dom дерево не успевает построиться
JavaScript
1
// @run-at document-end
попробуйте
1
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
16.03.2016, 19:02  [ТС]
Уже пробовал всяко: document-start, document-end, document-idle. Никаких изменений.
0
 Аватар для madzal
54 / 54 / 40
Регистрация: 22.08.2014
Сообщений: 424
16.03.2016, 19:14
можно посмотреть страницу с конкретным примером ?
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
16.03.2016, 19:31  [ТС]
К сожалению, никак. Это рабочий интерфейс с ограниченным доступом и всякими NDA(
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
22.03.2016, 18:26  [ТС]
Вопрос по-прежнему актуален. Искал сайты, на которых воспроизводится подобная проблема. Один из примеров: https://www.duolingo.com/

Ресурс нейтральный. Надеюсь, ссылку выкладывать можно.

Скрипт должен менять цвет элемента в правом верхнем углу (с надписью "Язык сайта: Русский"):
JavaScript
1
document.getElementById('site-language-btn').style.backgroundColor = 'red';
Через консоль работает, через обезьяну - нет. В чем загвоздка?
0
 Аватар для madzal
54 / 54 / 40
Регистрация: 22.08.2014
Сообщений: 424
23.03.2016, 13:13
потому что в исходном коде нету текста "Язык сайта",значит это создаётся скриптом,это должно решить вашу проблемму
JavaScript
1
2
3
window.addEventListener("DOMContentLoaded", function() {
document.getElementById('site-language-btn').style.backgroundColor = 'red'
}, false)
1
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
23.03.2016, 15:18  [ТС]
Спасибо, на этом сайте проверил - работает, а на нужном - по-прежнему нет) Попробовал запустить с задержкой через setTimeout, результат есть, но это изврат какой-то.
0
 Аватар для madzal
54 / 54 / 40
Регистрация: 22.08.2014
Сообщений: 424
23.03.2016, 18:33
poprobyi zamenit' "DOMContentLoad" na "load"
1
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
23.03.2016, 21:05
Schizorb, я тоже попробовал приручить эту замасленную обезьяну и она оказалась весьма послушной. Не знаю какое волшебство спрятано в след.коде, но он таки работает(!):

JavaScript
1
2
3
4
5
6
window.onload = function () {
  var elem = document.getElementsByTagName('div');
  for(var i = 0; i < elem.length; i++){
    elem[i].style.backgroundColor = 'red';
  }
};
1
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
24.03.2016, 13:10  [ТС]
Цитата Сообщение от madzal Посмотреть сообщение
poprobyi zamenit' "DOMContentLoad" na "load"
Пробовал уже.
Цитата Сообщение от Padimanskas Посмотреть сообщение
Не знаю какое волшебство спрятано в след.коде, но он таки работает(!):
Тоже не срабатывает.

В общем, пока остановился на варианте с таймером. Хоть и через одно место, но пока это единственный вариант, который работает.
0
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
24.03.2016, 15:01
Schizorb, а вообще такие проблемы связаны с подгрузкой скриптов(и др.ресурсов) на странице. То есть если какие-то элементы генерируется из скрипта(загружается асинхронно) на странице, то нужно ждать окончания его полной загрузки и выполнения, а уж потом искать эти элементы в greasemonkey. Спасает ситуацию такая особенность, что гризманки может выполняться перед загрузкой страницы. Есть один хак, уж он точно должен работать(у меня работает):

JavaScript
1
2
3
4
5
6
7
// @run-at document-start
var everythingLoaded = setInterval(function() {
  if (/loaded|complete/.test(document.readyState)) {
    clearInterval(everythingLoaded);
    alert('complete');
  }
}, 10);
Добавлено через 10 минут
хотя мож и не получится, хз)
1
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
24.03.2016, 15:51  [ТС]
Padimanskas, работает)) Только 10 мс маловато, и примерно в каждом 10-м случае не срабатывает почему-то. В принципе, поведение такое же, как и у моего собственного костыля с setInterval.
0
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
24.03.2016, 20:53
Schizorb, все оказалось намного проще. iframe-ы естественно генерируют события загрузки страницы, поэтому window.onload может запускаться несколько раз(в зависимости от кол-ва iframe). Очевидное решение это добавить метаблок // @noframes в начало юзерскрипта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2016, 20:53
Помогаю со студенческими работами здесь

Динамическое изменение значений: getElementById() не работает
хочу сделать чтобы в новостях менялись цены выгружаю через PHP данные в JS вот так &lt;style type=&quot;text/javascript&quot;&gt; ...

Greasemonkey
Хочу создать юзерскрипт который бы разделял страницу на две, одна из которой была бы главной и не изменялась, а вторая изменялась бы при...

Greasemonkey + Chrome ?
Добрый день, пытаюсь портировать GM скрипт в Хром. Не работает событие DOMContentLoaded, почему? // ==UserScript== // @name ??? //...

Скрипт в GreaseMonkey, с чего начать?
Добрый день! Хочу разузнать у знающих людей, как начать писать скрипт. Я поставил GreaseMonkey на Мозилы и мне нужно написать скрипт....

Дайте наставление по скрипту. Как вариант Greasemonkey
В общем дело обстоит так. Работа предстоит с Firefox. Есть страница...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru