Javascript.RU

Букмарклеты и правила их написания

Букмарклет(bookmarklet) - это javascript-код, который сохраняется как закладка в браузере. Он работает за счет использования протокола <a href="javascript:...">.

Выбирая такую закладку, вы запускаете яваскрипт-код в контексте текущей страницы. А дальше он уже может делать что угодно: править страницу, делать запросы к серверу и, вообще, использовать всю мощь современного javascript.

Поэтому де-факто букмарклет - это javascript-плагин к браузеру.

Для примера сделаем букмарклет, который осуществляет поиск выделенного текста в гугле.

Функция на javascript была бы такая:

function searchGoogle() {
  var selected
  
  if (window.getSelection) selected = window.getSelection()
  else if (document.getSelection) selected = document.getSelection()
  else selected = document.selection.createRange().text
  var q = "" + selected

  if (q)  location="http://www.google.com/search?q="+encodeURIComponent(q);
  void 0;
}

В конце функции searchGoogle стоит void 0. Это кроссбраузерно останавливает обработку ссылки браузером, предотвращая ненужный переход.

Испытаем ее:

<a href="javascript:searchGoogle();">Искать выделенное</a>

Выделите текст и кликните: Искать выделенное

Чтобы превратить функцию в букмарклет - достаточно "запаковать" ее в одну строку и заменить кавычки на одинарные (или на &quot;,), чтобы не было конфликта с закрывающими кавычками javascript:

<a href="javascript: if (window.getSelection) selected = window.getSelection(); else if (document.getSelection) selected = document.getSelection(); else selected = document.selection.createRange().text; q = &quot;&quot;+selected; if (q) location=&quot;http://www.google.com/search?q=&quot;+encodeURIComponent(q);  void 0; ">Искать выделенное</a>

Все, букмарклет готов. Для установки - достаточно перетащить мышкой эту ссылку в закладки.

После этого достаточно выделить текст на странице и кликнуть на закладку, чтобы найти выделенный текст в гугл.

Открытый документ может представлять собой фреймсет. При этом способы обращения к содержимому, использованные в нашем примере, работать не будут. Текст надо искать во фреймах, а не в текущем окне.

Есть несколько способов обойти эту проблему.

Если букмарклет не задуман для работы с фреймами - можно проверять их наличие и выводить предупреждение.

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

if(frames.length > document.getElementsByTagName('iframe').length)
  alert('Извините, фреймы не поддерживаются.');
else{
  /* код букмарклета */
}

С другой стороны, поддержка фреймов - хорошая фича. Например, букмарклет для поиска в гугл должен работать на сайтах с фреймами.

Решение - рекурсивный обход фреймов:

function traverse(win){
  try{
    /* Работа с win.document */
    ...
  } catch(e){
    /* Ошибка доступа к фрейму */
  }

  /* Вызов traverse для вложенных фреймов */
  for(var i=0; i<win.frames.length; i++) {
      traverse(win.frames[i]);
  }
}
traverse(window);

Вызов traverse(window) рекурсивно обрабатывает(например, ищет выделение) все фреймы, начиная с текущего окна.

В нее добавлена конструкция try ... catch для обработки возможных ошибок безопасности браузера, которые происходят, если доступ к фрейму противоречит политике Same Origin. Например, когда ифрейм используется для показа рекламы с другого домена.

Так как букмарклет закрыт в двойные кавычки - желательно использовать в коде либо &quot;, либо одинарные.

Например, в букмарклете для поиска в гугл можно заменить все &quot; на одинарные кавычки. Тоже будет работать:

<a href="javascript: if (window.getSelection) selected = window.getSelection(); else if (document.getSelection) selected = document.getSelection(); else selected = document.selection.createRange().text; q = ''+selected; if (q) location='http://www.google.com/search?q='+encodeURIComponent(q);  void 0; ">Искать выделенное</a>

Если функция или операция присваивания возвращает значение - то, какое бы оно ни было, букмарклет перенаправит посетителя на новую страницу, которая показывает это значение.

Иногда это можно грамотно использовать. например показать сводку по ключевым словам в документе. Обычно же это значение перехватывают и обнуляют при помощи void. Типичное решение - поставить в конце букмарклета:

void 0;

Альтернативный вариант - делать всю работу внутри функции, не возвращающей значения. Для этого создается и тут же вызывается анонимная функция:

<a href="javascript: (function(){ .... })()">переколбасить страницу</a>

Этот способ имеет еще тот бонус, что вы можете использовать локальные переменные и не загрязнять глобальную область видимости.

Букмарклет работает в глобальной области видимости.

Это значит, что даже переменная, объявленная с var, будет глобальной:

<a href="javascript: var a = 5; void 0">Запишет в window.a</a>

Чтобы это обойти - используют 2 способа.

Первый - назначить переменным уникальные имена типа aBBZZ. Это криво.

Второй - оборачивать букмарклет в анонимную функцию:

<a href="javascript:(function(){ var a = 5; })()">Запишет в локальную переменную</a>

При этом также отпадает необходимость в void.

Так выглядит поисковый букмарклет, обернутый в анонимную функцию:

<a href="javascript:(function(){ var selected; if (window.getSelection) selected = window.getSelection(); else if (document.getSelection) selected = document.getSelection(); else selected = document.selection.createRange().text; var q = ''+selected; if (q) location='http://www.google.com/search?q='+encodeURIComponent(q);})(); ">Искать выделенное</a>

В отличие от исходного варианта, он не загрязняет глобальную область переменными selected и q.

Число символов в букмарклете ограничено. Причем, оно варьируется не только от браузера к браузеру, но и между версиями.

Вот некоторые данные:

Браузер Максимальное кол-во символов
Netscape > 2000
Firefox > 2000
Opera > 2000
IE 4 2084
IE 5 2084
IE 6 508
IE 6 SP 2 488
IE 7 2084

Как видите, Internet Explorer 6.0 держит до 508 символов, а Internet Explorer 6.0 SP2 - еще хуже, всего лишь 488 символов. Так что, если вы хотите быть уверенными, что букмарклет запустится в IE6 - ограничьте его 488 символами.

Это ограничение не относится напрямую к размеру скрипта в <a href="javascript:...">. Оно срабатывает когда букмарклет добавляют в избранное. Вы можете сделать замечательный букмарклет, он будет работать на странице, но при добавлении в избранное код будет обрезан.

Чтобы это обойти, букмарклет в IE может подключать внешние скрипты:

...
var script=document.createElement('script')
script.src='http://my.bookmarklet.ru/myscript.js'
document.getElementsByTagName('head')[0].appendChild(script)
...

Альтернативный подход - разрабатывать букмарклет только для "Продвинутых браузеров". Это работает, если букмарклет представляет собой полезный инструмент, ради которого не лень и браузер сменить.

Например, многие SEO'шные букмарклеты сделаны именно так. Хочешь использовать - поставь FF и инструмент к твоим услугам.

Успешного плагинописания!


Автор: Gvozd, дата: 25 октября, 2008 - 17:46
#permalink

Грамотная статья!
раскрыты некоторые особенности, про которые нет ни слова в других статьях про букмарклеты.
Большое спасибо


Автор: Stevens (не зарегистрирован), дата: 29 февраля, 2020 - 20:28
#permalink

Автор: Гость (не зарегистрирован), дата: 3 марта, 2020 - 05:43
#permalink

Автор: Lex1 (не зарегистрирован), дата: 16 ноября, 2008 - 18:12
#permalink

> Максимальное кол-во символов
Google Chrome > 2000 (проверено с ~16000 символами)
Safari Win - около 2000 символов


Автор: Гость (не зарегистрирован), дата: 1 марта, 2020 - 18:01
#permalink

Автор: Гость (не зарегистрирован), дата: 1 марта, 2020 - 18:02
#permalink

Автор: Grif (не зарегистрирован), дата: 16 января, 2009 - 12:51
#permalink

Грамотная статья! и очень понятная


Автор: Гость (не зарегистрирован), дата: 1 марта, 2020 - 18:04
#permalink

nice


Автор: Life (не зарегистрирован), дата: 19 января, 2009 - 15:06
#permalink

Для меня лично непонятно даже мой друг непонял..


Автор: Гость (не зарегистрирован), дата: 15 января, 2013 - 00:26
#permalink

Неудивительно. Вы ведь еще в школе не поняли, как "не" с глаголами пишется. Какие уж тут букмарклеты...


Автор: Гость (не зарегистрирован), дата: 16 февраля, 2009 - 18:52
#permalink

а можно ли выбрать window.getSelection() из нужного div?


Автор: FRACTAL (не зарегистрирован), дата: 20 февраля, 2009 - 11:43
#permalink

Хорошая статейка, СПАСИБО! А хто-нить подскажет, каг сделать чтобы этот выделенный текст, который потом ишет Гугл, открывался в новой вкладке?


Автор: Гость (не зарегистрирован), дата: 26 марта, 2009 - 13:47
#permalink

 open('http://www.google.com/search?q='+encodeURIComponent(q))
вместо
location='http://www.google.com/search?q='+encodeURIComponent(q)


Автор: dantistus (не зарегистрирован), дата: 9 апреля, 2009 - 21:58
#permalink

Офигенская статья, спасибо вам большое! Только что открыл для себя удивителный мир букмарклетов, буду думать, как его можно использовать для себя


Автор: vk (не зарегистрирован), дата: 20 апреля, 2009 - 01:38
#permalink

Да, здорово!
Как я понимаю, поколдовав с запросом и кодом, можно как проводить google-поиск по конкретному сайту или сайтами, а может и выводить результаты в рамках своего ресурса.


Автор: Гость (не зарегистрирован), дата: 21 декабря, 2009 - 01:44
#permalink
if (top != window) ...

Это к предмету вывода "в рамках"


Автор: HelpeR, дата: 28 марта, 2010 - 08:59
#permalink

Прочитав статью я сразу же обрадовался и попытался сделать такой букмарклет

<a href="javascript: var img = document.getElementsByTagName('img'); img[0].src = 'тут свой рисунок';">images</a>

но к сожалению это не работает ))


Автор: Артём Шегеда, дата: 25 августа, 2010 - 22:51
#permalink

где-то так:

<a href="javascript:(function(){var img = document.getElementsByTagName('img'); img?(img[0].src='http://javascript.ru/modules/smileys/packs/smilies/smile.gif'):0;})()">Заменить</a>

Автор: Increazon, дата: 15 апреля, 2010 - 00:30
#permalink

popa, для FireFox есть дополнение GreaseMonkey которое все ети скрипты управлять и можно неограниченная длинна. Но оно никому не надо. Опера, Хроме = Отстой, Сафари мы любим, Но самый самый фаирфокс!


Автор: max_the_best (не зарегистрирован), дата: 26 июня, 2010 - 17:10
#permalink

HelpeR,
код типа:

<a href="javascript: var img = document.getElementsByTagName('img'); img[0].src = 'тут свой рисунок';">images</a>

не будет работать в принципе, так как img[0].src вставляет изображение в массив img , а не в документ.Правильно так:

<a href="javascript:document.getElementsByTagName('img')[0].src='loading.gif'; void(0);">images</a>

прочитай про букмарклеты ещё раз внимательнее.


Автор: Гость (не зарегистрирован), дата: 8 августа, 2011 - 15:00
#permalink

Гений! Гений!!
Кто-нибудь объясните человеку про присвоение и передачу ссылок на объекты


Автор: Гость (не зарегистрирован), дата: 17 октября, 2010 - 14:58
#permalink

А как подсчитать количество знаков в выделенном тексте в Хроме


Автор: B@rmaley.e><e, дата: 18 октября, 2010 - 07:18
#permalink
<div>Select this text</div>
<span id="counter">Hover this div to know length of selection</span>
<script>
document.getElementById('counter').onmouseover = function(){
  var selection = document.getSelection ? document.getSelection() : window.getSelection();
  this.innerHTML = selection.toString().length;
}
</script>

Автор: Гость (не зарегистрирован), дата: 23 октября, 2010 - 03:46
#permalink

Доброго времени суток, подскажите, где может быть ошибка?

Пытаюсь реализовать описанный для IE способ подключения скриптов через внешние файлы:

имеется закладка

<a href="javascript:(function(){document.getElementsByTagName('head')[0].appendChild(document.createElement('SCRIPT')).src='file:///C:/scripts/test.js';})();"></a>

которая подгружает локальный файл со скриптом

function somefunc()
{
alert("run");
}
somefunc();

Пытался добавлять тоже самое в body, а также вызывать функцию "вручную" через консоль firebug. Сам скрипт и его содержимое появляется в html отладчика, но консоль выдаёт, что функция "not defined", и ничего не происходит. NoScript'ом разрешены локальные скрипты.
Я что-то делаю неправильно, или это какая-то политика безопасности браузера, либо ещё что?


Автор: Гость (не зарегистрирован), дата: 26 октября, 2010 - 02:13
#permalink

Отвечаю на собственный вопрос: действительно, всё дело в политике безопасности браузера (во всяком случае это касается firefox). Вот тут кое-что имеется на эту тему.


Автор: Alexen (не зарегистрирован), дата: 27 февраля, 2020 - 20:58
#permalink

Nice Review PethmPethm


Автор: Alenson (не зарегистрирован), дата: 29 февраля, 2020 - 07:52
#permalink

Great Review https://vorovape.co.uk


Автор: Alenson (не зарегистрирован), дата: 29 февраля, 2020 - 07:52
#permalink

Great Review https://vorovape.co.uk


Автор: Андрей (гость) (не зарегистрирован), дата: 24 октября, 2010 - 13:27
#permalink

про букмарклеты знаю "не вчера", но только сейчас возник вопрос, в котором гугл - не помощь. Как "защититься" от этих букмарклетов? Используя их не составит труда изменить (например) значения скрытых инпутов форм. Конечно, подобные поля при правильной логике не содержат критической информации.. Но, например, баловства ради, добавить комментарий не в ту ветку, или к другому высказыванию.. и т.п. Судя по моим "изысканиям" такой защиты нет, верно?


Автор: AweMerC (не зарегистрирован), дата: 13 января, 2011 - 07:18
#permalink

Создаю свой проект. И возник точно такой же вопрос, как и у Вас. Ведь любой школьник уже сможет с легкостью поломать мне мою задумку. Сейчас этих так называемых готовых букмарклетов хоть отбавляй! Но никто не пишет как от них защититься, возможно никто и не знает как это сделать. Может все-таки есть умники? Так же, этот вопрос попробую решить сам. Если найду решение, обязательно отпишусь.


Автор: Aндрeй (не зарегистрирован), дата: 1 февраля, 2011 - 00:58
#permalink

Нет, не "защититься". Все, что на стороне пользователя и всё, что от него приходит - на веру принимать нельзя )) Только (своего рода) кеширование формы перед выдачей и пост-проверка возвращаемых значений


Автор: sparc64, дата: 15 декабря, 2013 - 01:37
#permalink

Сейчас появилась возможность отключить скрипты из неизвестных источников.
Посмотрите в сторону заголовков ответа сервера: "content-security-policy" и "x-content-security-policy"


Автор: ksi, дата: 1 апреля, 2011 - 18:15
#permalink

Скажите, а обязательно использовать encodeURIComponent() (в поисковом запросе)?


Автор: guest (не зарегистрирован), дата: 31 октября, 2013 - 23:04
#permalink

Да, обязательно. Это кодирует специальные символы в URLEncode, иначе данные могут отправиться не правильно.


Автор: Hfub (не зарегистрирован), дата: 7 мая, 2011 - 08:36
#permalink

Подскажите, можно ли сделать так чтобы скрипт (Букмарклет) выполнялся автоматически сразу при загрузке страницы? Т.е. как совместить его написание а адресной строке вместе с адресом сайта?


Автор: Гость (не зарегистрирован), дата: 8 мая, 2011 - 21:29
#permalink

Букмарклет тут не поможет. Смотрите в сторону UserJS.


Автор: Гость (не зарегистрирован), дата: 5 июля, 2011 - 14:50
#permalink

Добрый день!
Подскажите пожалуйста, мне необходимо реализовать букмарклет, палитры цветов для сайта, и при наличии изображения необходимо вытащить из него все цвета, но я не могу воспользоваться же для этого canvas, так как он не является js кодом, а по другому пройти каждый пиксель изображения не знаю как.
Заранее спасибо!


Автор: _SR_71_, дата: 25 марта, 2012 - 20:39
#permalink

А что именно полезного в букмарклетах, ведь то же самое можно написать в функциях, а потом запускать эту функцию при нажатии на ту же ссылку.
Да, и можно по подробнее, как нанести вред с помощью букмарклетов, потому что пример с формами я не понял.


Автор: zenitchik (не зарегистрирован), дата: 4 июня, 2012 - 11:02
#permalink

_SR_71_
Букмарклет вы храните у себя, а применяете к любому сайту, не обязательно своему.
Например, можно удалить рекламу (у меня был случай, когда реклама была внатуре нестерпимо мерзкая, и расположенная рябом с видио, которое мне нужно было просмотреть).

Эпидемия jQuery головного мозга, СИЛЬНО облегчает разработку букмарклетов
На более-менее крупном сайте наверняка включён jQuery, а если нет - то какая-то другая библиотека.


Автор: zames (не зарегистрирован), дата: 14 ноября, 2014 - 21:28
#permalink

День добрый!
Народ помогите пожалуйста начинающему разобраться со следующей конструкцией из примера:

1 if(frames.length > document.getElementsByTagName('iframe').length)
2 alert('Извините, фреймы не поддерживаются.');
3 else{
4 /* код букмарклета */
5 }

А именно ,не могу сообразить в каких ситуациях условие в if вернет истину.
Как рассуждаю я , есть допустить на странице один элемент Iframe , следовательно
window.frames.length = 1;
Обьект NodeList Возвращаемый методом getElementsByTagName , будет содержать 1 обьект iframe , значит document.getElementsByTagName('iframe').length= 1;
Условие не выполнилось значит алерт мы не увидим, но фрейм на странице есть
Вопрос где я ошибаюсь?

Очень надеюсь на Вашу помощь!
Спасибо!


Автор: Гость (не зарегистрирован), дата: 26 января, 2020 - 18:46
#permalink

1 if(frames.length >= document.getElementsByTagName('iframe').length)
2 alert('Извините, фреймы не поддерживаются.');
3 else{
4 /* код букмарклета */
5 }


Автор: serega386, дата: 29 июля, 2016 - 23:41
#permalink

Есть еще один нюанс с символом %. Их нужно заменить на %25 и отделить пробелом от последующего числа.


Автор: Inwer (не зарегистрирован), дата: 29 ноября, 2018 - 21:17
#permalink

Я вот тут https://c-wd.ru/tools/bookmarklet/ букмарклеты беру и доволен.


Автор: Maxine Harmon (не зарегистрирован), дата: 12 апреля, 2019 - 05:34
#permalink

Thanks for publishing such useful information.
soundcloud converter


Автор: helensten (не зарегистрирован), дата: 4 июля, 2019 - 05:48
#permalink

Oh! This article has suggested to me many new ideas. You try play super smash flash 2 onine now


Автор: canlitv.center (не зарегистрирован), дата: 28 августа, 2019 - 12:39
#permalink

Thanks for providing such a nice information. If in future you want to watch online TV, check my website.


Автор: canlitv.center (не зарегистрирован), дата: 28 августа, 2019 - 12:40
#permalink

Спасибо за предоставление такой хорошей информации. Если в будущем вы хотите смотреть онлайн-телевидение, проверьте мой сайт. canlitv.center


Автор: Гость (не зарегистрирован), дата: 5 сентября, 2019 - 23:51
#permalink

Вот тут букмарклеты лучше https://c-wd.ru/tools/bookmarklet/


Автор: pornpwd (не зарегистрирован), дата: 4 ноября, 2019 - 14:26
#permalink

artical is really informative and suggested me many new ideas. you can also try another good website having articles regarding free passwords to access many sites in free of cost for study or review purposes.


Автор: Гостcocaь (не зарегистрирован), дата: 14 ноября, 2019 - 07:52
#permalink

Thanks to this article I can find out more. Expand my knowledge and abilities. Actually the article is very practical.
fnaf


Автор: john bond (не зарегистрирован), дата: 8 февраля, 2020 - 17:19
#permalink

Nice knowledge gaining article. This post is really the best on this valuable topic.
go here


Автор: Гость90 (не зарегистрирован), дата: 12 февраля, 2020 - 12:53
#permalink

why can't I post comments?
friv?


Автор: johnb6 (не зарегистрирован), дата: 22 февраля, 2020 - 19:03
#permalink

I am glad you take pride in what you write. This makes you stand way out from many other writers that push poorly written content.
Heart disease


Автор: johnb (не зарегистрирован), дата: 23 февраля, 2020 - 14:25
#permalink

Your blog provided us with valuable information to work with. Each & every tips of your post are awesome. Thanks a lot for sharing. Keep blogging,
pest control


Автор: john bond (не зарегистрирован), дата: 25 февраля, 2020 - 13:47
#permalink

Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include.
Truly Lovely Kitchen


Автор: johnb6 (не зарегистрирован), дата: 28 февраля, 2020 - 21:59
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
fjackets


Автор: johnb6 (не зарегистрирован), дата: 29 февраля, 2020 - 22:47
#permalink

This was really an interesting topic and I kinda agree with what you have mentioned here!
3D printing workshops


Автор: johnb6 (не зарегистрирован), дата: 3 марта, 2020 - 00:08
#permalink

Nice knowledge gaining article. This post is really the best on this valuable topic.
glass cut to size


Автор: johnb (не зарегистрирован), дата: 12 марта, 2020 - 13:14
#permalink

This type of message always inspiring and I prefer to read quality content, so happy to find good place to many here in the post, the writing is just great, thanks for the post.
asbestos course


Автор: john bond (не зарегистрирован), дата: 14 марта, 2020 - 10:29
#permalink

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.
bot ngu coc la gi


Автор: john bond (не зарегистрирован), дата: 14 марта, 2020 - 13:13
#permalink

I am very enjoyed for this blog. Its an informative topic. It help me very much to solve some problems. Its opportunity are so fantastic and working style so speedy.
Smart Wireless Meat Thermometers


Автор: john bond (не зарегистрирован), дата: 21 марта, 2020 - 13:46
#permalink

i read a lot of stuff and i found that the way of writing to clearifing that exactly want to say was very good so i am impressed and ilike to come again in future..
Oakland Solar Company


Автор: john bond (не зарегистрирован), дата: 21 марта, 2020 - 18:10
#permalink

I really impressed after read this because of some quality work and informative thoughts . I just wanna say thanks for the writer and wish you all the best for coming!.
asphalt paving


Автор: john bond (не зарегистрирован), дата: 23 марта, 2020 - 14:09
#permalink

If more people that write articles really concerned themselves with writing great content like you, more readers would be interested in their writings. Thank you for caring about your content.
biztonságos fogászati szoftver


Автор: john bond (не зарегистрирован), дата: 23 марта, 2020 - 20:28
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information...
Barber shop Hawthorn


Автор: john bond (не зарегистрирован), дата: 26 марта, 2020 - 12:36
#permalink

Great article with excellent idea!Thank you for such a valuable article. I really appreciate for this great information..
flowchart


Автор: john bond (не зарегистрирован), дата: 26 марта, 2020 - 12:51
#permalink

This content is written very well. Your use of formatting when making your points makes your observations very clear and easy to understand. Thank you.
Best USB Wifi Adapters


Автор: john bond (не зарегистрирован), дата: 27 марта, 2020 - 15:02
#permalink

I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. Thanks...
oxygen therapy


Автор: john bond (не зарегистрирован), дата: 29 марта, 2020 - 10:58
#permalink

I am happy to find your distinguished way of writing the post. Now you make it easy for me to understand and implement the concept. Thank you for the post.
website designing quotes


Автор: john bond (не зарегистрирован), дата: 31 марта, 2020 - 12:08
#permalink

Thanks for the nice blog. It was very useful for me. I'm happy I found this blog. Thank you for sharing with us,I too always learn something new from your post.
drink specials near me now


Автор: quotedb (не зарегистрирован), дата: 1 апреля, 2020 - 04:00
#permalink

javascript has always been impressive, I don't know how many devics would exist without such an impressive piece of coding to process various commands.
CVC Marketing
funny money quotes


Автор: peve (не зарегистрирован), дата: 3 апреля, 2020 - 11:43
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
Barbados Web Design Company


Автор: pevedo (не зарегистрирован), дата: 4 апреля, 2020 - 18:38
#permalink

Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work.
Vegan Breakfast Recipes


Автор: peved (не зарегистрирован), дата: 7 апреля, 2020 - 12:36
#permalink

Awesome blog. I enjoyed reading your articles. This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work!
Top freelance Marketplace


Автор: john bond (не зарегистрирован), дата: 9 апреля, 2020 - 17:36
#permalink

I just couldn't leave your website before telling you that I truly enjoyed the top quality info you present to your visitors? Will be back again frequently to check up on new posts.
Painter Lawrenceville GA


Автор: wotodi (не зарегистрирован), дата: 13 апреля, 2020 - 10:22
#permalink

I admire what you have done here. I like the part where you say you are doing this to give back but I would assume by all the comments that this is working for you as well.
CreativeDogBoxes.com


Автор: caco (не зарегистрирован), дата: 14 апреля, 2020 - 06:45
#permalink

Thanks for sharing this helpful information. The news is very valuable and is very popular.
mapquest directions


Автор: goxafe (не зарегистрирован), дата: 17 мая, 2020 - 04:25
#permalink

I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it! would you mind updating your blog with more information?
moroccan furniture


Автор: Гость (не зарегистрирован), дата: 26 мая, 2020 - 22:02
#permalink

Огонь, спасибо за мануал, и вообще сайт крутой


Автор: robert5 (не зарегистрирован), дата: 28 мая, 2020 - 11:25
#permalink

I really like your design and style. Can you share more information please? Many thanks for this interesting article. skribbl io


Автор: pidasa (не зарегистрирован), дата: 3 июня, 2020 - 19:35
#permalink

Very useful post. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up. beni ourain carpets


Автор: pidas (не зарегистрирован), дата: 3 июня, 2020 - 19:38
#permalink

Hello I am so delighted I located your blog, I really located you by mistake, while I was watching on google for something else, Anyways I am here now and could just like to say thank for a tremendous post and an all round entertaining website. Please do keep up the great work. roofer summit nj


Автор: bernicekuh (не зарегистрирован), дата: 5 июня, 2020 - 08:52
#permalink

I read a article under the same title some time ago, but this articles quality is much, much better. How you do this..
glenrockroofing.com


Автор: farhan (не зарегистрирован), дата: 6 июня, 2020 - 16:19
#permalink

I'm glad I found this web site, I couldn't find any knowledge on this matter prior to.Also operate a site and if you are ever interested in doing some visitor writing for me if possible feel free to let me know, i am always look for people to check out my web site.
hazlet roof repair


Автор: suka chu (не зарегистрирован), дата: 9 июня, 2020 - 06:54
#permalink

An article worth noting and should be learned. Thank you for providing this great information. fireboy and watergirl


Автор: Warren Gay (не зарегистрирован), дата: 12 июня, 2020 - 16:38
#permalink

Great article! This is very useful in a browser. Thanks for this. shed building services


Автор: Rheed (не зарегистрирован), дата: 14 июня, 2020 - 17:04
#permalink

This article is very useful and thanks for sharing the information. towing needs


Автор: daisyanna (не зарегистрирован), дата: 17 июня, 2020 - 06:28
#permalink

I hope there are more articles and more information, very good information to share with me run 3


Автор: Michele (не зарегистрирован), дата: 17 июня, 2020 - 19:56
#permalink

Excellent post! This is a very useful javascript code and I've been using it on my siding browser. Thanks a lot!


Автор: Rheed (не зарегистрирован), дата: 8 июля, 2020 - 22:29
#permalink

Awesome post! Love reading these articles. Thanks! towing Woodbridge VA


Автор: John Dy (не зарегистрирован), дата: 14 июля, 2020 - 13:00
#permalink

Nice article! Been using this bookmarklet tool. Thanks for sharing this post! pest control Ashburn VA


Автор: Anbili (не зарегистрирован), дата: 22 июля, 2020 - 12:18
#permalink

Thanks for this post!if you like game happy wheels


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
6 + 5 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum