Pull to refresh

Comments 17

спасибо! ето мой первый скрипт к грейсманкей =)
Статья для совсем юных ;)
Лучше бы написали, как можно работать со страницей в процессе её загрузки или как можно включать css в userscript, если его чуть-чуть…
Кстати, да. Мне тоже интересно процесс загрузки страницы. Надеюсь, автор не оставит этот вопрос без внимания
Процесс обработки страницы скриптом Greasemonkey начинается по DOMContentLoaded. Возможно существуют хаки, которые позволяют включить обработку раньше, но врядли=)
В том-то и дело, что DOMContentLoaded иногда слишком поздно…
Видел в одном из скриптов цикл, который обходил все уже существующие элементы (только нужные скрипту, конечно, но не суть), обрабатывал их и ставил специальный класс, чтобы на следующей итерации пропустить обработанные элементы. Прерывался скрипт как раз на DOMContentLoaded ;)
Вот только я в своём скрипте воссоздать это не смог :(
Я это очень плохо представляю, сам цикл запускается по DOMContentLoaded, вообще всё что внутри скрипта GreaseMonkey можно условно запихнуть в addEventListener('DOMContentLoaded', function(){ /*code*/ }, false);

У Opera дела обстоят лучше, там обработку можно делать по ходу загрузки страницы, но есть свои подводные камни.
Код userscript'а запускается как код указанный в head, если я ничего не путаю, т.е. фактически сразу после инициализации страницы.
Для этого и используют что-то вроде while(! document.body){} и т.п. ;) И это позволяет обрабатывать элементы, как только они появляются в DOM, а не после окончательной загрузки всего дерева. Если этим уметь пользоваться, конечно =)
Проверил.
while (! document.body) alert('BeforeBody');
не работает.
function addStyleSheet(url){
var style;
if (typeof url == 'undefined')
{
style = document.createElement('style');
}
else
{
style = document.createElement('link');
style.rel = 'stylesheet';
style.type = 'text/css';
style.href = url;
}
document.getElementsByTagName('head')[0].appendChild(style);
style = document.styleSheets[document.styleSheets.length — 1];
return style;
}

// пример
style.insertRule('.tbl-main_left-bg {background-image: url(../images/tbl-main_left-bottom.gif); background-repeat: repeat-y; width: 66px;}', style.cssRules.length);
Некропостерство — зло, но добавлю, т.к. все гораздо проще:
GM_addStyle((<><![CDATA[
.pc_s .pc_img {width:150px; height:150px;}
#main {width:1192px;}
]]></>).toString());
Раз уж пост о Greasemonkey, то у меня есть вопрос. Как получить в GreaseMonkey доступ к Mootools если сайт использует этот фреймворк(например Хабр)?
Когда я писал UserJS для Хабра, то в Опере все работало $, $$ правильно интерпретировалися. Под Greasemonkey ну никак не понимало, что я от него хочу.
Спасибо, буду разбиратся.
habrahabr.ru/blogs/GreaseMonkey/39431/ — тут есть ответ на ваш вопрос
Sign up to leave a comment.

Articles