HandyCache форум

Главная категория => Дополнения, плагины => Тема начата: popkov от 04 июля 2016, 13:56:41



Название: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: popkov от 04 июля 2016, 13:56:41
Я хочу, чтобы комментарии к постам LiveJournal автоматически раскрывались при загрузке страницы. В настоящее время, если пост получил более 50 комментариев (http://www.livejournal.com/support/faq/62.html), они загружаются свернутыми, причем даже эти свернутые комментарии подгружаются динамически. Есть скрипт (https://greasyfork.org/en/forum/discussion/comment/24488/#Comment_24488) для 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: сразу оказалось, что цепочки комментариев загружаются как отдельные страницы, что и неудобно, и раздувает объем хранимых данных многократно. Идеально было бы просто загружать пост с уже развернутыми комментариями.


Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: LordMerlin от 04 июля 2016, 16:13:00
В последних версиях СМ появилась возможность делать самому правила типа "Вставка Ява скриптов". Там есть несколько, пробуйте.


Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: Tilks от 04 июля 2016, 16:30:01
СМ - еще лучше!
(http://fs5.directupload.net/images/160704/temp/y7ku2a83.png) (http://fs5.directupload.net/images/160704/y7ku2a83.png)


Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: popkov от 05 июля 2016, 05:33:08
В последних версиях СМ появилась возможность делать самому правила типа "Вставка Ява скриптов". Там есть несколько, пробуйте.
Нашел упоминание об этом в документации (http://handycache.ru/cm/cm2/doc/ContentMaster.html#%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D1%8B), но в самих настройках не нашел, как добавить правило вставки ява-скрипта. На странице Редактора выпадающее меню "Тип правил" не содержит ничего похожего (см. прикрепленный скриншот). Можно подробнее?



Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: Tilks от 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


Название: Re: Как внедрить Javascript в динамическую вэб-страни
Отправлено: popkov от 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", ...)).


Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: Tilks от 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


Название: Re: Как внедрить Javascript в динамическую вэб-страни
Отправлено: popkov от 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-кэш у меня отключены. В чем же дело?

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


Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: Tilks от 05 июля 2016, 13:33:35
Цитировать
С чем это может быть связано?
если это можно стабильно повторить, лучше в теме по CM2 отписать, или Михаилу в личку.
У меня, например, не срабатывала правило на LiveJournal, пока было включено второе правило на той же странице.
window.onload=function(){window.alert("Test");}


Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: popkov от 05 июля 2016, 13:41:56
У меня, например, не срабатывала правило на LiveJournal, пока было включено второе правило на той же странице.
window.onload=function(){window.alert("Test");}
У меня то же самое, это для window.onload как раз ожидаемо: можно только одно действие на него навесить (следующее определение отменяет предыдущее).
Да, воспроизводится стабильно, в т.ч. с window.onload=function(){window.alert("Test");}.


Название: Re: Как внедрить Javascript в динамическую вэб-страницу?
Отправлено: popkov от 06 июля 2016, 16:07:51
скрипт срабатывает, но почему-то только один раз для конкретного URL.
Проблема исправлена в CM 2.17.4.