Создание букмарклетов с помощью jQuery

Создание букмарклетов с помощью jQuery

Привет. Поздравляю всех с началом рабочей недели! Я вот на работу не иду, потому что остался без нее. Но это не страшно. Страшно на самом деле то, что я здесь уже давно ничего не писал.

Уважаемые читатели, пользовались ли вы когда-нибудь букмарклетами? Или, может быть, даже не знаете что это такое? Я теперь пользуюсь. И разрешите вам рассказать почему.

 

Ликбез

Букмарклет (англ. bookmarklet; bookmark — «закладка» и applet — «апплет») — небольшая JavaScript-программа, оформленная как javascript: URL и сохраняемая как браузерная закладка.

Букмарклеты добавляют браузеру дополнительную функциональность. По сути, это клиентский код, который может сделать со страницей все, что вам угодно. Добавить тег <script> на страницу, поменять внешний вид страницы и т.д.

Раньше единственный случай, когда я использовал букмарклеты было привязывание легкой версии файербага. Вы можете попробовать. Перетащите нижеследующую ссылку в закладки. После клика на нее в любом браузере должен появиться блок с облегченной версией файербага.

[ firebug lite ]

В свое время я это делал. Подумал "ммм... и не лень им было делать такую бесполезную штуковину?"

Но случилось однажды...

И тут я наткнулся на пост Карла Шведберга, известного в узких кругах ограниченных людей человека, в котором он говорит, что улучшил букмарклет, который подключает jQuery. Улучшал он его с декабря 2006, так что скрипт получился действительно улучшенным =)

Карл предполагает, что подключив jQuery, мы сможем расширить нашу власть над страницей, и, используя консоль браузера, делать разные веселые штуки.

Вот, собственно, сам букмарклет:

[ jQuerify ]

Он определяет, подключен ли на сайте jQuery. Если джыКвери отуствует, букмарклет его подключает.

Мы же хотим, чтобы после подгрузки jQuery, выполнялся еще некоторый скрипт.

Код букмарклета с точкой входа скрипта:

  (function() {
var s=document.createElement('script'),
el=document.createElement('div'),
b=document.getElementsByTagName('body')[0];
var otherlib=false,
startCounter=tryCounter=10,
delay=250,
msg='';
s.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js');
el.style.position='fixed';
el.style.height='32px';
el.style.width='220px';
el.style.marginLeft='-110px';
el.style.top='0';
el.style.left='50%';
el.style.padding='5px 10px 5px 10px';
el.style.fontSize='12px';
el.style.color='#222';
el.style.backgroundColor='#f99';

if(typeof jQuery!='undefined') {
msg='This page already using jQuery v'+jQuery.fn.jquery;
return showMsg();
} else {
if(typeof $=='function') {
otherlib=true;
}
document.getElementsByTagName('head')[0].appendChild(s);
}
function showMsg() {
el.innerHTML=msg;
b.appendChild(el);
window.setTimeout(function() {
if (typeof jQuery=='undefined') {
b.removeChild(el);
} else {
jQuery(el).fadeOut('slow',function() {
jQuery(this).remove();
});
if (otherlib) {
$jq=jQuery.noConflict();
}
}
} ,2500);
}
var tryjQuery=function() {
setTimeout(function() {
if (typeof jQuery=='undefined') {
if (tryCounter) {
tryCounter--;
tryjQuery();
} else {
msg='Sorry, but after ' + startCounter + ' attempts, jQuery hasn\'t loaded';
showMsg();
}
} else {
msg='This page is now jQuerified with v' + jQuery.fn.jquery;
if (otherlib) {msg+=' and noConflict(). Use $jq(), not $().';}
showMsg(); /* здесь - самое то место, чтобы вставить какой-нибудь свой скрипт */
}
}, delay);
};
tryjQuery();
})();

 

Мы определили, куда надо вставлять. Но! букмарклет не может выглядеть так, как выглядит код выше. Для начала мы должны его причесать: избавиться от переносов и пробелов (заменить их на %20) и получившуюся сплошную строку вставить в нужное место :)

Примеры

Собственно, задача, которую я решал сводилась к автомазизации кликов по кнопке «Выслать приглашение» в контакте:

Когда вы находитесь на странице, которая изображена выше, используйте букмарклет, опубликованный ниже:

[ Повысылать приглашения ]

И все кнопочки кликнутся автоматически.

UPD. Метод показа товарищей поменялся, поэтому этот букмарклет больше не работает :(

Я не буду приводить здесь текст букмарклета, потому что этим никому не помогу. Вы можете его скопировать, скопировав адрес ссылки букмарклета.

Еще один пример использования той же техники на том же ресурсе: приглашение всех друзей в группу.

Сначала кликаем по кнопке «Пригласить в группу»:

А уже на следующей странице используем букмарклет:

[ Добавить друзей в список для отправки приглашений ]

 UPD. Этот тоже

Надеюсь мой сегодняшний пост был не только интересен, но и полезен.

В комментариях приглашаю поделиться вашими букмарклетами.

Адьес!

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 11

Shimon
Не мною придуманный но очень удобный букмарклет на jQuery - 960 Grinder
Еще один, который показывает какой фреймворк использован на странице - WTFramework
Семен
блин, как же эти спамеры вконтакте задрали, а тут еще и готовое пособие для всех желающих
sergy
действительно ) пост познавателен и интересен. но на мой взгляд полезен в первую очередь для спамеров )
stunpix
спасибо - пригодится. Самое забавное, что метод лежал на поверхности (сам не раз в адресной строке скриптики запускал), но вот чтоб впихнуть его в ярлык - соображалки не хватило :) До гугл хрома в огнелесице юзал greasemonkey, но после перехода на гугл остался без этой поддержки. ещё раз сенк за идею (хоть она и не вами рождена) :)
Димо
Спасибо! Букмарклеты с помощью jQuery - это гениально!
Обычно я пользовался только букмаклетом для скачивания видео с ютуб (вот)
#
Димо
Alex
бгг, вот они, спамеры где!!
#
Alex
Евгений
Alex, подобный подход слишком слаб для полноценного спама. Когда-то я реализовывал полноценную спам-машину в конакте, но меня заела совесть и я бросил это дело.
А то, что я предлагаю в статье - просто интересная техника работы с букмарклетами.
Eugene Che
Я уже пол года пользую такие штуки. Например перевод выделенного слова на странице, или оттвтттерить ссылку... Применений много.
mal
А я в свое время для этого использовал грэйсманки. В нем подключал jquery и кстати, там все намного проще - не нужно ничего форматировать. Хотя для простых задач и букмаклеты подойдут.
#
mal
Сергей
Не работает: пишет "This page already using jQuery v1.4" и всё.
Евгений
Да, Сергей, скрипты уже не работают - с момента написания статьи вывод друзей поменялся, да и другие плюшки тоже.

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler