И совсем главная хотелка.
rutracker блокирует фреймы и получается что невозможно пользоваться RSS ридером — NewsFox.
Как бы заблокировать эту проверку?
Отсутствует
Нужно разворачивать всё комментарии на dirty (показать комментарии от ....).
Например, так:
// ==UserScript== // @name d3 // @namespace comments // @include https://gif.d3.ru/* // @include http://gif.d3.ru/* // @version 1 // @run-at document-idle // @grant none // ==/UserScript== function ClickComment() { var i, links = document.getElementsByClassName('b-comment__expand-button'); for (i = links.length-1; i >= 0; i--) links[i].click(); setTimeout(ClickComment, 1000); } setTimeout(ClickComment, 1);
Добавлено 27-03-2017 04:27:38
Как бы заблокировать эту проверку?
Проверка там такая:
if ( top != self && !self.location.hostname.match(BB.allowed_translator_hosts) ) { $(function() { $('body').html('<center><h1><br><br>Похоже вас пытаются обмануть<br>frame\'s hostname: ' + self.location.hostname + '</h1></center>'); throw new Error('in frame'); }); }
BB.allowed_translator_hosts - это регулярное выражение /^(translate\.googleusercontent\.com)$/
Если туда засунуть что-то другое, то проверку можно обломать.
Но вот вопрос: а когда скрипт Greasemonkey запускать? Делать это до скриптов страницы смысла нет, так как то значение переменной страничный скрипт присваивает, и он просто затрёт наше значение. А после скриптов страницы уже поздно - показ во фрейме к этому времени будет обнаружен и заблокирован.
Разве что переменной self присвоить top... Но неизвестно, что при этом поломается. Пробовать надо.
// ==UserScript== // @name rutrackerRSS // @namespace rutrackerRSS // @include https://rutracker.org/* // @include http://rutracker.org/* // @version 1 // @run-at document-start // @grant none // ==/UserScript== window.self = window.top;
Отредактировано yup (27-03-2017 04:31:27)
Отсутствует
yup
Ааааа.... Дай я тебя расцелую НУ всё прямо в точку. rutrackerRSS заработал сразу. Это же #$&$% сколько я с ним мучался и пытался решить проблему самостоятельно.
Только d3 я поправил домены на — *.d3.ru/* Никак не могу понять зачем там setTimeout = 1000мс. Для перестраховки?
P.S. Спасибо всем за помощь. В ответ могу только отблагодарить своими знаниями в железе (любой глюк железа). Любой вопрос по выбору или настройке роутера пишите в личку.
Отредактировано leshiy_odessa (27-03-2017 13:15:31)
Отсутствует
Только d3 я поправил домены на — *.d3.ru/* Никак не могу понять зачем там setTimeout = 1000мс. Для перестраховки?
Да. Эксперимент показал, что ссылки на ответы там не присутствуют на страничке изначально, а добавляются - скриптами странички - уже после того, как она получена, из-за чего даже @run-at document-idle не помогает. Нужно ждать, пока ссылки добавятся, и только потом их раскрывать.
Можно, конечно, просто выждать какое-то предопределённое время, например, две или три секунды (одной иногда было мало, проверял), и разово запустить процесс разворачивания ответов, но нет гарантии, что к этому времени добавление закончится (мало ли из-за чего оно застопорится...). Приходится тупо делать это раз в секунду всё время, пока страничка открыта - это и ждать начала процесса разворачивания ответов не очень долго, и в то же время браузер не очень грузит.
(Со ссылками в поисковой выдачей Google та же история, и до сих пор лучшего решения не нашлось.)
Отредактировано yup (27-03-2017 18:09:09)
Отсутствует
yup
Я тут конечно погарячкувал, решил сделать самостоятельно по аналогии разворачивания спойлеров в комментах youtube и обнаружил, что на d3.ru class называется не "b-comment__expand-button", а "b-comment__expand-button-container". Исправил в скрипте и он продолжает работать. Отсюда вопрос. Это джава скрипту пофигу, он ищет по началу имени или это у вас какой то другой хитрый способ, что вы нашли этот класс?
update Таки у меня получилось сделать по аналогии для youtube. Теперь красота.
// ==UserScript== // @name Youtube comments open spoiler // @namespace comments // @include https://youtube.com/* // @include http://youtube.com/* // @include https://www.youtube.com/* // @include http://www.youtube.com/* // @version 1 // @run-at document-idle // @grant none // ==/UserScript== function ClickComment() { var i, links = document.getElementsByClassName('yt-uix-button yt-uix-button-size-default yt-uix-button-link'); for (i = links.length-1; i >= 0; i--) links[i].click(); setTimeout(ClickComment, 1000); } setTimeout(ClickComment, 1);
/* --- Скрыть ответы --- */ .yt-uix-expander-head.comment-replies-renderer-expander-up.comment-replies-renderer-hide, /* --- Свернуть --- */ .yt-uix-button.yt-uix-button-size-default.yt-uix-button-link {display:none !important}
update2 Пошли какие то подтормаживания. Походу я словил какой непрерывный цикл.
Отредактировано leshiy_odessa (27-03-2017 21:06:33)
Отсутствует
обнаружил, что на d3.ru class называется не "b-comment__expand-button", а "b-comment__expand-button-container".
Нет. Класс ссылки - именно "b-comment__expand-button". А "b-comment__expand-button-container" - класс того <div>, в который эта ссылка вложена.
Исправил в скрипте и он продолжает работать.
Что этот <div> на click() реагирует - ну, значит, создатели странички на него обработчик этого события навесили. Можно считать это случайностью и рассчитывать на подобное в других местах не стоит.
Это джава скрипту пофигу, он ищет по началу имени или это у вас какой то другой хитрый способ, что вы нашли этот класс?
Функция getElementsByClassName() ищет по точному имени (точнее - по полному набору заданных имён).
А я класс ссылки нашёл элементарно - посмотрел с помощью Firebug в дереве DOM.
Отредактировано yup (27-03-2017 21:13:20)
Отсутствует
Пошли какие то подтормаживания. Походу я словил какой непрерывный цикл.
1. YouTube и так неторопливый сайт. И если подгружать сразу кучу новых сообщений, да ещё одновременно с просмотром видео, то тормозов надо ожидать изначально.
2. Почему такой странный набор классов? У кнопки на подгрузку сообщений классы: "yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-replies-renderer-paginator comment-replies-renderer-expander-down yt-uix-button-link", и на тестовой страничке, где я это посмотрел, таких объектов находится в 10 раз меньше, чем по тому урезанному набору, который использован в коде скрипта.
3. Бесконечный цикл реализован в самом скрипте - один проход в секунду. Но в отличие от кнопок подгрузки сообщений, которые исчезают после клацания, те объекты, которые получает нынешний код, никуда не деваются, и их много, так что время на них тратится на каждом проходе. Хотя я не думаю, что эта задержка будет как-то заметна.
Отредактировано yup (27-03-2017 21:58:43)
Отсутствует
1. YouTube и так неторопливый сайт. И если подгружать сразу кучу новых сообщений, да ещё одновременно с просмотром видео, то тормозов надо ожидать изначально.
Я двигаю за ползунок и как бы спотыкаюсь/зависаю. То есть что то оно там делает уже после того как все комментарии развернуты.
update Подвисоны пропали, когда сделал двойной код: разворачивание комментариев + подгрузка других страниц — "Показать ещё". А когда вернул разворачивания спойлеров, то микро зависонны вернулись. Загадка.
2. Почему такой странный набор классов? У кнопки на подгрузку сообщений классы: "yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-replies-renderer-paginator comment-replies-renderer-expander-down yt-uix-button-link", и на тестовой страничке, где я это посмотрел, таких объектов находится в 10 раз меньше, чем по тому урезанному набору, который использован в коде скрипта.
Если быть точнее то у меня класс такой — yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-section-renderer-paginator yt-uix-sessionlink.
Но не суть, потому что речь идет не про подгрузку комментариев, а про разворачивании спойлеров. Но идею воспринял, возможно оставлю. Но тогда браузер точно рухнет от количества комментариев на некоторых видео.
Отсутствует
Проблема вырисовывается. НА ютубе два вида спойлеров :
1. "Читать дальше" — yt-uix-button yt-uix-button-size-default yt-uix-button-link
2. "Показать ответы" — yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-replies-renderer-paginator comment-replies-renderer-expander-down yt-uix-button-link
Если поставить первый, то всё спойлеры открываются, но идут подзависоны.
Если поставить одновременно, то первый спойлер ("Читать дальше") не срабатывает, второй работает и исчезают подзависоны.
Если их поменять местами, первым в скрипте поставить "Показать ответы", то всё срабатывает, но зависоны еще жестче.
Отсутствует
Но не суть, потому что речь идет не про подгрузку комментариев, а про разворачивании спойлеров.
Как-то так получилось, что на тех страничках, на которые я заглядывал в процессе нашего обсуждения, таких штуковин просто не было. Сейчас вот только впервые наткнулся.
Кнопки с набором классов "yt-uix-button yt-uix-button-size-default yt-uix-button-link" после нажатия не исчезают. И классы их не меняются. Просто на самом деле у каждого комментария есть две такие кнопки: "Читать дальше" и "Спрятать". И либо они обе невидимые (если комментарий короткий), либо видна только одна из них. При нажатии на видимую кнопку она становится невидимой, а другая - видимой.
А скрипт, в его нынешнем состоянии, тупо жмёт на все подряд раз в секунду.
Вот такой вариант предлагаю попробовать:
// ==UserScript== // @name Youtube comments open spoiler // @namespace comments // @include https://youtube.com/* // @include http://youtube.com/* // @include https://www.youtube.com/* // @include http://www.youtube.com/* // @version 2 // @run-at document-idle // @grant none // ==/UserScript== function ExpandComments() { var i, links = document.getElementsByClassName("comment-text-toggle-link read-more"); for (i = links.length-1; i >= 0; i--) if (links[i].className != "comment-text-toggle-link read-more hid") links[i].click(); setTimeout(ExpandComments, 1000); } setTimeout(ExpandComments, 1);
Я двигаю за ползунок и как бы спотыкаюсь/зависаю. То есть что то оно там делает уже после того как все комментарии развернуты.
Я выхожу в Интернет с ноутбука с довольно маленьким экраном. На страничках YouTube в него помещается только окошко видеоролика и его название. Даже чтобы описание посмотреть - нужно ползунок вниз тянуть.
Но описание после прокрутки видно сразу, а комментарии, которые под ним расположены, - нет. Вместо них только надпись "Подождите". Комментарии на её месте появляются секунды через 3-4.
А когда вниз комментарии протягиваю, то по индикатору на вкладке видно, что браузер периодически ещё что-то из Интернета подтягивает.
И всё это - естественное поведение YouTube, без вмешательства каких-либо сторонних скриптов.
Отредактировано yup (28-03-2017 07:38:03)
Отсутствует
Вот такой вариант предлагаю попробовать:
Вы забыли что два вида спойлера ( "Читать дальше" и "Показать ответы"). Два часа пытался их объединить. Один раз даже получилось, но появлялся глюк с вечным нажатием по не заданному классу. Прошу помощи.
update Прошла минута от ответа и у меня вышло. Чувствую себя индийским программистов копи пастой.
/* https://forum.mozilla-russia.org/viewtopic.php?pid=733851#p733851 */ // ==UserScript== // @name Youtube comments open spoiler // @namespace comments // @include https://youtube.com/* // @include http://youtube.com/* // @include https://www.youtube.com/* // @include http://www.youtube.com/* // @version 1 // @run-at document-end // @grant none // ==/UserScript== /* ----- "Читать дальше" ----- */ function ExpandComments() { var i, links = document.getElementsByClassName("comment-text-toggle-link read-more"); for (i = links.length-1; i >= 0; i--) if (links[i].className != "comment-text-toggle-link read-more hid") links[i].click(); /* ----- "Показать ответы" ----- */ var i, links = document.getElementsByClassName("comment-replies-renderer-paginator"); for (i = links.length-1; i >= 0; i--) if (links[i].className != "yt-uix-expander-head") links[i].click(); setTimeout(ExpandComments, 1000); } setTimeout(ExpandComments, 1); /* ПОДГРУЗКА ОСТАЛЬНЫХ КОММЕНТАРИЕВ — "Показать ещё". Если много комментариев, то выжирает всю память. function ClickComment() { var i, links = document.getElementsByClassName('yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-section-renderer-paginator yt-uix-sessionlink'); for (i = links.length-1; i >= 0; i--) links[i].click(); setTimeout(ClickComment, 1000); } setTimeout(ClickComment, 1);*/
.comment-replies-renderer-hide,
.comment-text-toggle-link.show-less
{display:none !important}
А скрипт, в его нынешнем состоянии, тупо жмёт на все подряд раз в секунду.
Я это понял и пытался ночью переделать предыдущий ваш срипт.
update2 и тут до меня как до жирафа дошло, что нужно было переименовать вторую function xpandComments() на function ExpandComments2(). Ну я и тупой.
Отредактировано leshiy_odessa (28-03-2017 18:51:05)
Отсутствует
Вы забыли что два вида спойлера ( "Читать дальше" и "Показать ответы").
Нет, не забыл. Просто это достаточно независимые операции, а объединённого кода я не видел, поэтому не стал заниматься самодеятельностью и предложил только код по той проблеме, которая непосредственно обсуждалась.
Интересно а Java скриптом можно сделать такое? Скрыть классы.
.comment-replies-renderer-hide,
.comment-text-toggle-link.show-less
{display:none !important}
Из JavaScript можно создавать новые стили, но доступ к существующим стилям есть только на чтение. Поэтому вариантов имеется два:
1. Создать в стилях новый класс с параметром "display:none" и назначить его всем скрываемым элементам.
2. Получить список всех элементов нужного класса и присвоить им "display:none":
var i, elems = document.getElementsByClassName("comment-replies-renderer-hide"); for (i = elems.length-1; i >= 0; i--) elems[i].style.display = false;
Но через userContent.css оно как-то красивее и эффективнее.
Отсутствует
2. Получить список всех элементов нужного класса и присвоить им "display:none":
Я думал вы ошиблись с display = false, помозговал пол часа и вспомнил, что видел hide или none, потом потратил еще минут десять на кавычки. В итоге таки родил — for (i = elems.length-1; i >= 0; i--) elems[i].style.display = "none";
Начинаю писать вам ответ, нажимаю цитировать и вижу — none
Огромное вам спасибо за помощь и науку.
/* https://forum.mozilla-russia.org/viewtopic.php?pid=733851#p733851 */ // ==UserScript== // @name Youtube comments open spoiler // @namespace comments // @include https://youtube.com/* // @include http://youtube.com/* // @include https://www.youtube.com/* // @include http://www.youtube.com/* // @version 1 // @run-at document-end // @grant none // ==/UserScript== /* ----- "Читать дальше" ----- */ function ExpandComments() { var i, links = document.getElementsByClassName("comment-text-toggle-link read-more"); for (i = links.length-1; i >= 0; i--) if (links[i].className != "comment-text-toggle-link read-more hid") links[i].click(); /* ----- "Показать ответы" ----- */ var i, links = document.getElementsByClassName("comment-replies-renderer-paginator"); for (i = links.length-1; i >= 0; i--) if (links[i].className != "yt-uix-expander-head") links[i].click(); setTimeout(ExpandComments, 1000); } setTimeout(ExpandComments, 1); function HideClass() { /* --- УБРАЛ КНОПКУ "Скрыть ответы" --- */ var i, elems = document.getElementsByClassName("comment-replies-renderer-hide"); for (i = elems.length-1; i >= 0; i--) elems[i].style.display = "none"; /* --- УБРАЛ КНОПКУ "Свернуть" --- */ var i, elems = document.getElementsByClassName("comment-text-toggle-link show-less"); for (i = elems.length-1; i >= 0; i--) elems[i].style.display = "none"; setTimeout(HideClass, 1000); } setTimeout(HideClass, 1); /* ПОДГРУЗКА ОСТАЛЬНЫХ КОММЕНТАРИЕВ — "Показать ещё". Если много комментариев, то выжирает всю память. function ClickComment() { var i, links = document.getElementsByClassName('yt-uix-button yt-uix-button-size-default yt-uix-button-default load-more-button yt-uix-load-more comment-section-renderer-paginator yt-uix-sessionlink'); for (i = links.length-1; i >= 0; i--) links[i].click(); setTimeout(ClickComment, 1000); } setTimeout(ClickComment, 1);*/
Отредактировано leshiy_odessa (28-03-2017 18:51:19)
Отсутствует
Перейдя с Opera столкнулся с непоняткой. На rutracker.org и на некоторых других сайтах во время перехода с одной страницы на другую появляется сообщение ''Документ просрочен этот документ более не доступен.Чтобы отобразить эту страницу, Pale Moon должен отправить информацию...''и тд.Может кто нибудь, если это возможно сможет написать скрипт (или может такой существует) который бы сразу перебрасывал на заданную страницу.Или есть другой способ.Помогите разрулить ситуацию.
Отсутствует
'Документ просрочен этот документ более не доступен.Чтобы отобразить эту страницу, Pale Moon должен отправить информацию...''
Может быть Вы доигрались с параметром browser.cache.check_doc_frequency и кэш отключен ?
Отсутствует
Может кто нибудь, если это возможно сможет написать скрипт (или может такой существует) который бы сразу перебрасывал на заданную страницу.
Скриптами Custom Buttons или userChrome.js такое можно было бы сделать. Но через Greasemonkey - нельзя.
Или есть другой способ.Помогите разрулить ситуацию.
Чтобы запросы не выдавались, нужно разрешить кеширование страниц и/или увеличить их "срок жизни". Эти параметры передаются сервером в http-заголовках страницы.
Самый простой способ вмешаться и изменить в них что-то - дополнение Modify Response Headers.
Но там, похоже, заголовки меняются всегда, для всех сайтов. Делать это выборочно может гораздо более навороченное дополнение moz-rewrite того же автора, существующее в двух вариантах: Rewrite HTTP Headers (JSON) и Rewrite HTTP Headers (JS)
Добавлено 09-04-2017 02:01:11
Хм... Подумал: можно попробовать сделать скрипт, автоматически нажимающий кнопку повторной отправки запроса.
Отредактировано yup (09-04-2017 02:01:11)
Отсутствует
yup пишет:
Хм... Подумал можно попробовать сделать скрипт, автоматически нажимающий кнопку повторной отправки запроса.
Спасибо что откликнулись,если вы сможете сделать такой скрипт было бы просто отлично, я в этих делах-Валенок.С CB кнопками и Greasemonkey столкнулся совсем недавно.А на счёт кеширования я так понимаю вы имеете в виду browser.cache.disk_cache_ssl оно у меня true а вот как увеличить их ''срок жизни''я честно говоря не знаю.И мне кажется это не поможет В сообщениях говорится-''В целях безопасности Pale Moon не производит автоматический повторный запрос важных документов''. Ну а дополнения не хотелось бы ставить.Хотя конечно попробую.
Отсутствует
если вы сможете сделать такой скрипт было бы просто отлично,
В принципе - могу. И даже попытался, когда свой ответ писал. Но пока никак не удаётся получить то самое сообщение от браузера с кнопкой повторной отправки - ни на одном из сайтов.
А на счёт кеширования я так понимаю вы имеете в виду browser.cache.disk_cache_ssl оно у меня true а вот как увеличить их ''срок жизни''я честно говоря не знаю.
Нет, я говорил о параметрах кеширования, которые сервер передаёт браузеру в заголовке своего ответа. Там и запрет кеширования может быть прописан, и время хранения странички в кеше. Указанные дополнения позволяют подменять эти параметры до того, как браузер их прочитает.
И мне кажется это не поможет В сообщениях говорится-''В целях безопасности Pale Moon не производит автоматический повторный запрос важных документов''.
Должно помочь. Повторный запрос потому и нужен, что странички в кеше нет.
Ну а дополнения не хотелось бы ставить.Хотя конечно попробую.
Первое из них для регулярной работы, возможно, - не лучший вариант. А с настройкой остальных двух разобраться будет непросто. Во всяком случае, их автор так говорит.
Отредактировано yup (09-04-2017 05:00:20)
Отсутствует
Попробовал я Rewrite HTTP Headers (JSON) и Rewrite HTTP Headers (JS) нечего не изменилось. Тут мне кажется два варианта или их нужно както подстроить или другое, Palemoon отличный браузер но у него есть очень нехорошая черта, установив дополнения не всегда понятно работает ли оно.Так что может эти дополнения и хорошие но у PM с ними не совместимость или чтото другое.
Но пока никак не удаётся получить то самое сообщение от браузера с кнопкой повторной отправки - ни на одном из сайтов.
На SeaMonkey этого может и не получится.Я пробовал на Firefox-45.8.0 и 52.0.1 там всё открывается.И что там разрабы нашаманили такого чего нет в PM неизвестно.
Отсутствует
или их нужно както подстроить
Ещё как надо! Rewrite HTTP Headers - это как Custom Buttons или Greasemonkey: само по себе, без дополнительного "программирования", не делает ничего.
Причём настройка делается не в браузере, а сочинением специального текстового файла. Его описание находится в README.md в архиве самого дополнения, и оно же помещено на страничку AMO, откуда дополнение скачивается.
На SeaMonkey этого может и не получится.
Но я же его периодически вижу. Нечасто, но вижу. Осталось дождаться следующего раза.
Отредактировано yup (09-04-2017 05:57:19)
Отсутствует
если вы сможете сделать такой скрипт было бы просто отлично
Попробуем вслепую:
// ==UserScript== // @name ReSend // @namespace ReSend // @include https://rutracker.org/* // @version 1 // @grant none // ==/UserScript== document.getElementById("errorTryAgain").click();
Отредактировано yup (09-04-2017 06:53:52)
Отсутствует