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

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

16.03.2016, 18:10. Показов 2344. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
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, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru