Comments 17
спасибо! ето мой первый скрипт к грейсманкей =)
Статья для совсем юных ;)
Лучше бы написали, как можно работать со страницей в процессе её загрузки или как можно включать css в userscript, если его чуть-чуть…
Лучше бы написали, как можно работать со страницей в процессе её загрузки или как можно включать css в userscript, если его чуть-чуть…
Кстати, да. Мне тоже интересно процесс загрузки страницы. Надеюсь, автор не оставит этот вопрос без внимания
Не всё сразу -)
Процесс обработки страницы скриптом Greasemonkey начинается по DOMContentLoaded. Возможно существуют хаки, которые позволяют включить обработку раньше, но врядли=)
В том-то и дело, что DOMContentLoaded иногда слишком поздно…
Видел в одном из скриптов цикл, который обходил все уже существующие элементы (только нужные скрипту, конечно, но не суть), обрабатывал их и ставил специальный класс, чтобы на следующей итерации пропустить обработанные элементы. Прерывался скрипт как раз на DOMContentLoaded ;)
Вот только я в своём скрипте воссоздать это не смог :(
Видел в одном из скриптов цикл, который обходил все уже существующие элементы (только нужные скрипту, конечно, но не суть), обрабатывал их и ставил специальный класс, чтобы на следующей итерации пропустить обработанные элементы. Прерывался скрипт как раз на DOMContentLoaded ;)
Вот только я в своём скрипте воссоздать это не смог :(
Я это очень плохо представляю, сам цикл запускается по DOMContentLoaded, вообще всё что внутри скрипта GreaseMonkey можно условно запихнуть в addEventListener('DOMContentLoaded', function(){ /*code*/ }, false);
У Opera дела обстоят лучше, там обработку можно делать по ходу загрузки страницы, но есть свои подводные камни.
У Opera дела обстоят лучше, там обработку можно делать по ходу загрузки страницы, но есть свои подводные камни.
Код userscript'а запускается как код указанный в head, если я ничего не путаю, т.е. фактически сразу после инициализации страницы.
Для этого и используют что-то вроде while(! document.body){} и т.п. ;) И это позволяет обрабатывать элементы, как только они появляются в DOM, а не после окончательной загрузки всего дерева. Если этим уметь пользоваться, конечно =)
Для этого и используют что-то вроде while(! document.body){} и т.п. ;) И это позволяет обрабатывать элементы, как только они появляются в DOM, а не после окончательной загрузки всего дерева. Если этим уметь пользоваться, конечно =)
Проверил.
while (! document.body) alert('BeforeBody');
не работает.
while (! document.body) alert('BeforeBody');
не работает.
Да вот собственно тут всё и объясняется
wiki.greasespot.net/DOMContentLoaded
wiki.greasespot.net/DOMContentLoaded
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);
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());
GM_addStyle((<><![CDATA[
.pc_s .pc_img {width:150px; height:150px;}
#main {width:1192px;}
]]></>).toString());
Раз уж пост о Greasemonkey, то у меня есть вопрос. Как получить в GreaseMonkey доступ к Mootools если сайт использует этот фреймворк(например Хабр)?
Когда я писал UserJS для Хабра, то в Опере все работало $, $$ правильно интерпретировалися. Под Greasemonkey ну никак не понимало, что я от него хочу.
Когда я писал UserJS для Хабра, то в Опере все работало $, $$ правильно интерпретировалися. Под Greasemonkey ну никак не понимало, что я от него хочу.
Sign up to leave a comment.
Пишем свой первый скрипт для Greasemonkey