Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1

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

16.03.2016, 18:10. Показов 2319. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru