+  HandyCache форум
|-+  Главная категория» Дополнения, плагины» Как внедрить Javascript в динамическую вэб-страницу?
Имя пользователя:
Пароль:
Страниц: [1]   Вниз
  Отправить эту тему    Печать  
Автор Тема: Как внедрить Javascript в динамическую вэб-страницу?  (Прочитано 5623 раз)
0 Пользователей и 1 Гость смотрят эту тему.
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« : 04 июля 2016, 13:56:41 »

Я хочу, чтобы комментарии к постам LiveJournal автоматически раскрывались при загрузке страницы. В настоящее время, если пост получил более 50 комментариев, они загружаются свернутыми, причем даже эти свернутые комментарии подгружаются динамически. Есть скрипт для Greasemonkey, который решает эту задачу:

Код:
function clickEm(){
  console.log("Running clickEm");
  var elinks = document.querySelectorAll('.b-tree-twig-1 .b-leaf-actions-expandchilds > a');
  for (var i=0; i<elinks.length; i++){
    elinks[i].click();
  }
}
window.addEventListener("load", function(e) { clickEm(); }, false);

По сути это просто Javascript код, который запускается после того, как страница полностью загружена, и кликает по кнопкам "Развернуть" верхнего уровня (которые автоматически раскрывают всю цепочку комментариев).

Помогите, пожалуйста, написать расширение, которое бы внедряло этот скрипт в код вэб-страниц LiveJournal. Если можно это сделать средствами СМ - еще лучше! Для тестирования удобны, например, следующие посты:

http://suggestions.livejournal.com/825341.html
http://news.livejournal.com/141929.html#comments

P.S. Сама эта задача возникла, когда захотел скачать целиком блог вместе с комментариями средствами Offline Explorer: сразу оказалось, что цепочки комментариев загружаются как отдельные страницы, что и неудобно, и раздувает объем хранимых данных многократно. Идеально было бы просто загружать пост с уже развернутыми комментариями.
Сообщить модератору   Записан
LordMerlin
Старожил
****

Репутация: +12/-8
Offline Offline

Сообщений: 488


« Ответ #1 : 04 июля 2016, 16:13:00 »

В последних версиях СМ появилась возможность делать самому правила типа "Вставка Ява скриптов". Там есть несколько, пробуйте.
Сообщить модератору   Записан
Tilks
Новичок
*

Репутация: +8/-1
Offline Offline

Сообщений: 49


« Ответ #2 : 04 июля 2016, 16:30:01 »

СМ - еще лучше!
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #3 : 05 июля 2016, 05:33:08 »

В последних версиях СМ появилась возможность делать самому правила типа "Вставка Ява скриптов". Там есть несколько, пробуйте.
Нашел упоминание об этом в документации, но в самих настройках не нашел, как добавить правило вставки ява-скрипта. На странице Редактора выпадающее меню "Тип правил" не содержит ничего похожего (см. прикрепленный скриншот). Можно подробнее?



* Буфер обмена01.png (36.51 Кб, 893x287 - просмотрено 146 раз.)
Сообщить модератору   Записан
Tilks
Новичок
*

Репутация: +8/-1
Offline Offline

Сообщений: 49


« Ответ #4 : 05 июля 2016, 08:55:33 »

Может надо обновить...
Версия 2.10.0 от 30.08.2015 (для НС версии >= 1.0.0.583)
  • ContentMaster: добавлен новый фильтр "Вставка ява-скриптов"[/i]

    у меня на картинке версия Content Master extension v. 2.17.1 (обновлять с самого Content Master)
    версия HC 1.0.0.645
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #5 : 05 июля 2016, 10:21:36 »

Может надо обновить...
Версия 2.10.0 от 30.08.2015 (для НС версии >= 1.0.0.583)
  • ContentMaster: добавлен новый фильтр "Вставка ява-скриптов"[/i]

    у меня на картинке версия Content Master extension v. 2.17.1 (обновлять с самого Content Master)
    версия HC 1.0.0.645
В самом деле! У меня была версия 2.09, после обновления стала 2.17.3 и появился пункт "Вставка ява-скриптов".
Теперь удалось добавить правило, но без тэга и непонятно в какой файл (см. скриншот). Как удалось добиться, чтобы оно оказалось в файле CM_user_local.json (у меня такого нет) и с правильным тэгом?
Добавлено: 05 Июль 2016, 10:06:33

В HTML-коде вэб-страниц LiveJournal после добавления этого правила и сохранения мне не удается обнаружить вставленный скрипт (не говоря уже о том, что он не срабатывает: но по window.onload он срабатывать и не должен, его надо запускать через window.addEventListener("load", ...)).


* Буфер обмена01.png (23.99 Кб, 1245x434 - просмотрено 141 раз.)
« Последнее редактирование: 05 июля 2016, 11:17:20 от popkov » Сообщить модератору   Записан
Tilks
Новичок
*

Репутация: +8/-1
Offline Offline

Сообщений: 49


« Ответ #6 : 05 июля 2016, 11:43:54 »

Цитировать
Как удалось добиться, чтобы оно оказалось в файле CM_user_local.json (у меня такого нет) и с правильным тэгом?
1. создаёте в ручную пустой файл по пути (вроде можно этот пункт пропустить, файл умеет создаватся автоматом тоже)
HandyCache\Extensions\CM2.0\rules\local\ContentMaster
потом кликнуть по списку ContentMaster > потом в списках фильтров Add File > указать URL файла который создали > http://local.cm/rules/ContentMaster/CM_user_local.json
2. навести мышь на созданий файл в списке, рядом появится иконка карандаша > кликнуть по нему, чтобы начать редактировать
3. в окне редактирования кликнуть зелёную кнопку плюсика, заполнить форму , нажать сохранить , перегрузить списки, и новый список правил должен уже работать.

вам лучше тему про cm2 просмотреть, чтобы мне всё не пересказывать, что там пишет. Михаил проделал большую работу, чтобы было удобно списки редактировать, искать по ключевым словам, итд.

Цитировать
но по window.onload он срабатывать и не должен,
в списках если выбрать Вставка ява-скриптов по всем спискам, то есть примеры.
сначала попробуйте простое правило, чтобы убедится в работоспособности кода, например:
Код:
window.onload=function(){window.alert("Test");}
и на время тестирования лучше отключить другие списки. Мне, например, даже комментарии не показывает в ваших ссылках, если включен список AntiSocial
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #7 : 05 июля 2016, 13:26:09 »

Tilks
Большое спасибо, получилось! Улыбка
Действительно, window.onload срабатывает (в Greasemonkey не работало).
В файле CM_user_local.json у меня теперь следующее:
Код:
[{"Comment":"Expand LiveJournal Comments","Tags":{"LiveJournal":true},"Type":"JS","Find":"window.onload=function(){console.log(\"Running clickEm\");var elinks = document.querySelectorAll('.b-tree-twig-1 .b-leaf-actions-expandchilds > a'); for (var i=0; i<elinks.length; i++){elinks[i].click();}}","URL":"[^\\.]+\\.livejournal\\.com","Hash":"\u00045Zc\u0007"}]

Добавлено: 05 Июль 2016, 12:48:21

UPDATE.

Немного поспешил: скрипт срабатывает, но почему-то только один раз для конкретного URL. При перезугрузке страницы или при загрузке той же страницы в другом браузере скрипт не срабатывает. Особенно странно, что браузеры оказываются взаимосвязаны: кто первый загрузил URL, тот и получил скрипт... После нажатия на кнопку сохранения файла в настройках CM скрипт снова срабатывает, но тоже только один раз для конкретного URL. Чтение из кэша и RAM-кэш запретил - то же самое. С чем это может быть связано?
Добавлено: 05 Июль 2016, 13:02:07

UPDATE 2.

В окне Монитора при первоначальной загрузке пишется CM:0 hits, а при последующей загрузке того же URL в другом браузере или перезагрузке страницы - CM:0 hits(cached) (см. скриншот). Похоже, это как-то связано с кэшированием, но чтение из кэша, запись в кэш и RAM-кэш у меня отключены. В чем же дело?

Кстати, число срабатываний для "Вставка ява-скриптов" по-прежнему равно нулю (хотя скрипт уже неоднократно срабатывал)...


* Буфер обмена01.png (39.32 Кб, 1327x194 - просмотрено 139 раз.)
Сообщить модератору   Записан
Tilks
Новичок
*

Репутация: +8/-1
Offline Offline

Сообщений: 49


« Ответ #8 : 05 июля 2016, 13:33:35 »

Цитировать
С чем это может быть связано?
если это можно стабильно повторить, лучше в теме по CM2 отписать, или Михаилу в личку.
У меня, например, не срабатывала правило на LiveJournal, пока было включено второе правило на той же странице.
window.onload=function(){window.alert("Test");}
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #9 : 05 июля 2016, 13:41:56 »

У меня, например, не срабатывала правило на LiveJournal, пока было включено второе правило на той же странице.
window.onload=function(){window.alert("Test");}
У меня то же самое, это для window.onload как раз ожидаемо: можно только одно действие на него навесить (следующее определение отменяет предыдущее).
Да, воспроизводится стабильно, в т.ч. с window.onload=function(){window.alert("Test");}.
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #10 : 06 июля 2016, 16:07:51 »

скрипт срабатывает, но почему-то только один раз для конкретного URL.
Проблема исправлена в CM 2.17.4.
Сообщить модератору   Записан
Страниц: [1]   Вверх
  Отправить эту тему    Печать  

 
Перейти в: