Javascript.RU

Обмен данными для документов с разных доменов

Update: Более новый материал по этой теме находится по адресу https://learn.javascript.ru/xhr-crossdomain.

Кросс-доменный скриптинг - общее название для случая, когда страницы с одного домена производят запрос на другой.

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

В зависимости от того, одинаковый домен второго уровня или разный - применяются разные способы организации кросс-доменных запросов.

site1.net делает запрос на site2.net - в этом случае домены совершенно разные.

Документы, полученные в одном фрейме с site1.net не смогут обращаться к другому через JS, если он с site2.net.
Вообще, документы с разных доменов, протоколов или с разных портов (кроме IE) одного домена не могут общаться друг с другом (согласно same origin policy), и нельзя посылать XMLHTTPRequest на домен, отличный от текущего.

Самое простое решение - это проксирование запроса сервером. То есть, site1.net делает специальный запрос, например, на особенный URL
типа http://site1.net/proxy/site2.net/test.html, и сервер site1.net проксирует его на http://site2.net/test.html.

Если оба сайта работают на одном движке, то можно обойтись даже без проксирования, просто соответствующим образом закодировать обработку запросов
http://site1.net/proxy/*.

Из минусов такого подхода - лишняя нагрузка на сервер и дополнительные сетевые задержки при проксировании. Особенность - необходимость соответствующей серверной инфраструктуры.

Наиболее известный транспорт, позволяет такие запросы - это SCRIPT, т.к <script src="..."> может подгружать яваскрипт с любого домена.

  • Запросы на любые домены
  • Только GET
  • Необходима обертка в Javascript
  • Сложно отслеживать ошибки, лаги и т.п.

Если допустимо использование Flash - в нем есть свои средства кросс-доменных соединений (crossdomain.xml), и можно удобно передавать данные из flash в javascript.

Передача данных из javascript во flash несколько сложнее, но тоже осуществима.

Для использования такого транспорта, очевидно, необходим включенный flash.

  • Flash предоставляет универсальные средства обмена данными
  • Нужен рабочий Flash и "мост" из javascript во flash

Из смеси XMLHTTPRequest и Iframe получается оригинальный хак, называемый XhrIframeProxy. Он позволяет делать кросс-доменные запросы XmlHttpRequest, и успешно протестирован в Internet Explorer 6/7, Firefox 1.5+, Safari 2.0.3 и Opera 9.

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

Идентификатор фрагмента - это то, что идет в URL после решетки: http://site.com/path/to/file.html#fragment.

Документ, загруженный в IFrame, может менять идентификатор фрагмента родительского документа (т.е документа, содержащего iframe). Изменение фрагмента не приводит
к перезагрузке страницы. И, аналогично, родительский документ может менять идентификатор фрагмента в ифрейме.

Путем последовательных изменений #фрагмента образуется поток данных, который может передаваться в обе стороны. Т.к идентификатор фрагмента - текст, то все данные для передачи приходится (де)сериализовать, т.е превращать в JSON.

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

  1. На клиенте - создать ифрейм, в который загрузить специальный документ с сервера на другом домене
  2. Определить протокол передачи информации через идентификаторы фрагмента
  3. Сообщить обоим документам URL друг друга, так чтобы они могли правильно устанавливать идентификаторы фрагмента (чтобы установить адрес на другом домене, браузеру нужен полный URL)
  4. Использовать таймер javascript для обнаружения изменений фрагментов

Чтобы послать XMLHTTPRequest на другой домен:

  1. Создать javascript-объект, который реализует интерфейс XMLHTTPRequest (фасад)
  2. Использовать этот объект вместо реального объекта XMLHTTPRequest
  3. Для метода send() фасада сериализовать заголовки, метод, URL и данные запроса
  4. Браузер накладывает ограничение на размер URL документа, поэтому клиентский документ разбивает сериализованные данные в набор идентификаторов фрагментов подходящего размера
  5. Клиентский документ по очереди отсылает идентификаторы фрагментов на серверный документ (в ифрейм). Серверный документ подтверждает получение каждого
    идентификатора, и так - до тех пор, пока все данные не будут переданы.
  6. Серверный документ собирает из идентификаторов фрагментов исходные данные и преобразует их обратно в объект, а затем использует настоящий XMLHTTPRequest (на
    серверном домене), чтобы сделать запрос к серверу
  7. Затем серверный документ сериализует ответ на XMLHTTPRequest, и точно так же передает клиентскому документу через идентификаторы фрагмента
  8. Клиентский документ распаковывает ответ и ставит соответствующие значения в фасаде
  • 100% javascript
  • Легко вставляется в код, который использует XMLHTTPRequest
  • Техника использует ифреймы, поэтому требует больше памяти, чем родной XMLHTTPRequest
  • Трафик - в оба служебных ифрейма нужно загрузить изначальные скрипты и документы. В дальнейшем они могут быть кешированы
  • Установка URL'ов в IFrame'ы дает кликающие звуки в Internet Explorer. Это можно исправить при помощи ActiveX (описано в разделе транспорта Iframe)

Основной реальный минус, по мнению автора - это конкретный хак. С другой стороны, более пристойные предложения, хоть и внесены в W3C, но еще долго будут выходить
в мейнстрим. Несмотря на неказистый внешний вид: ифреймы, таймеры, сериализация - этот транспорт работает и кросс-браузерный.

XhrIframeProxy - не дает открытый доступ к любому сервису с XMLHTTPRequest API. Для того, чтобы этот транспорт работал, на сервере должен быть серверный документ, для загрузки в серверный ифрейм. Клиент никак не может повлиять на этот документ, т.к он с другого домена. Клиент обязан сообщить серверному документу свой полный URL, т.к он используется для установки идентификаторов фрагмента.

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

XhrIframeProxy реализован в dojo toolkit, и описан в dojo book: Cross Domain XMLHttpRequest using an IFrame Proxy. На момент написания этих слов, документация в dojo book устарела, лучше смотреть реализацию в SVN.

Так назовем коммуникацию, когда domain1.site.net делает запрос на domain2.site.net или site.net. То есть, когда есть общий наддомен, в данном случае site.net.

Основной вопрос - зачем такое вообще может понадобиться?

Первый сценарий - наш сайт domain.site.net является частью некой системы, в которой адрес news.site.net предоставляет ленту новостей, goods.site.net - товары,
и т.п., так что мы, имея такой домен, можем с удобством пользоваться этими вебсервисами.

Второй сценарий - оба таких сайта находятся под нашим контролем… Скажем, www.site.net и site.net формально на разных доменах, но могут одинаково обрабатываться сервером.

В таком случае все необходимые запросы можно сделать и на текущий домен - они так и так попадут к нам на сервер.
Но здесь появляется второе применение кросс-доменного скриптинга. А именно, обход ограничения HTTP 1.1 на соединения: не более двух одновременных запросов к серверу(домену/порту/протоколу).

Однажды, мне пришлось писать AJAX-компонент, который делает запросы к нескольким вебсервисам, причем время отклика может варьироваться (в зависимости от запроса) между 1-20 сек. При этом одно соединение было постоянно занято подгрузкой бесконечного ифрейма с сервера, через которое поступают обновления (push данных со стороны сервера в виде <script>-тагов). Оставался один канал на все про все - явно недостаточно для асинхронных запросов.

Также возможны случаи, когда нужно поддерживать несколько push-каналов, например, дополнительно открыто окно мини-чата, который реализован отдельно от общих обновлений.

Кросс-доменный скриптинг позволяет обойти лимит путем использования нескольких доменов. Бесконечный ифрейм подгружаем с updates.site.net, чат работает на chat.site.net, и свободны основные 2 канала для запросов с site.net.

Другой, пожалуй более распространенный пример использования - когда на основном сервере site.net крутится веб-сервер типа Apache, который не очень любит долговременные соединения, а на сервере chat.site.net крутится демон чата. Получается, что документы с разных серверов могут полноценно взаимодействовать на клиенте.

Как известно, обычно javascript из одного фрейма может как-то вызывать другой фрейм, только если они с одного домена. Но домен хранится в специальном свойстве document.domain, которое можно менять. Так что если два фрейма имеют один document.domain , то они могут делать друг с другом что угодно.

Конечно, есть ограничения безопасности - document.domain можно присваивать:

  • На текущий домен
  • На наддомен, но не вида org.ru (т.е job.site.com.ua можно поменять на site.com.ua, но не на com.ua)
  • В Firefox/Opera, после изменения домена на более короткий - вернуть домен обратно нельзя, в IE - можно

Так что в случае документов с разных сайтов на одном наддомене, можно присвоить свойству document.domain обоих документов этот общий домен, и тогда javascript-общение между ними возможно.

Обращаю внимание, что даже если документ и так с нужного домена site.com, то все равно нужно поставить document.domain:

// в документе с site.com надо поставить домен, хотя бы и так
document.domain = document.domain

После смены домена с domain.site.com на site.com, можно не только вызывать javascript для других документов с site.com, но и делать XMLHTTPRequest-запросы на site.com.

Что делать, если хочется делать запросы и на более короткий домен site.com и на исходный domain.site.com?

Перед следующим запросом в IE нужно вернуть document.domain обратно. В Opera/FF это невозможно (домен может быть установлен только в текущий или в домен высшего уровня), но в Opera 9/FF 1.5+ ситуация поправлена тем, что повторные запросы с исходного домена разрешаются.

Итак, алгоритм для IE/FF 1.5+/Opera 9

  1. Создать IFrame c другим поддоменом
  2. Сделать запрос с этого IFrame
  3. Установить document.domain такой же как у фрейма, куда надо отправить информацию и вызвать нужные функции
  4. Для IE - вернуть document.domain обратно перед следующим запросом

В этом примере используется как общение ифреймов с общим наддоменом, так и XMLHTTPRequest. Основной документ http://tmp.x/main.html регулярно получает данные с http://www.tmp.x/time.php, используя для этого промежуточный ифрейм http://www.tmp.x/iframe.html.

Общая логика:

  • Изначально iframe берется с домена, на который надо делать XHR-запросы
  • Затем для общения с родителем document.domain ставится равный общему с родителем наддомену, для общения с исходным доменом document.domain возвращается обратно. Возникающие при этом исключения игнорируются
<html>
<head>
	<script type="text/javascript">
		<!-- обрезаем домен текущей страницы до базового -->
		document.domain="tmp.x";
		<!-- эту функцию будет вызывать ифрейм с www.tmp.x -->
		function gotTime(result) { document.getElementById('time').innerHTML = result }
	</script>
</head>
<body>
	Счетчик
	<div id="time"></div>
	<!-- iframe с другого домена -->
	<iframe src="http://www.tmp.x/iframe.html"></iframe>
</body>
</html>
<html>
<head>
	<!-- подгружаем функцию getUrl (делает XMLHTTPRequest) -->
	<script type="text/javascript" src="xmlhttp.js"></script>
	<script type="text/javascript">
		function getTime(){
			// сделать запрос на адрес с того же домена, что и iframe, 
			// указать каллбэк gotResult
			getUrl("http://www.tmp.x/time.php", gotResult);
		}
		getTime();

		// каллбэк для обработки результата запроса
		function gotResut(status, headers, result) {
  			// для общения с родительским документом нужно поменять domain на tmp.x
			var oldDomain = document.domain
			document.domain = "tmp.x"
  			// и вызвать родителя, document.domain поставлен одинаковый там и тут
			window.parent.gotTime(result)
 
			// вернуть домен обратно на www.tmp.x, это необходимо IE,
			// чтобы сделать новый запрос на www.tmp.x
			try { 
				// для IE, в остальных браузерах ошибка...
				document.domain = oldDomain; 
			} catch(e) {  /* ... но там это не нужно */ }

			// запускаем новый запрос..
  			getTime()
		}
	</script>
</head>
<body></body>
</html>

В коде iframe.html домен меняется туда-обратно, потому что нужно делать запросы на www.tmp.x, а ответ сообщать документу с tmp.x.

О новых способах кросс-доменного общения читайте в продолжении этой статьи: Обмен данными между доменами. Часть 2..


Автор: Ивашка, дата: 28 марта, 2008 - 23:46
#permalink

MS анонсировала для восьмого IE объект XDomainRequest
Я так полагаю, что это у них серьезно и стоит его принять во внимание.


Автор: Илья Кантор, дата: 30 марта, 2008 - 02:20
#permalink

Да, а другие браузеры анонсировали поддержку кросс-доменных запросов в соответствии со стандартами. MS выпендрилась опять


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

вроде как еще window.name есть


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

yes, thanks for sharing this information today! best flat iron for curly hair


Автор: Джо (не зарегистрирован), дата: 26 декабря, 2008 - 00:24
#permalink

Все замечательно, но где можно посмотреть небольшой пример-модель взаимодействия по варианту XhrIframeProxy ?


Автор: Никита) (не зарегистрирован), дата: 26 января, 2009 - 18:58
#permalink

даже не знал что между 2 доменами можно устраивать обмен данными


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

"Наиболее известный транспорт, позволяет такие запросы - это SCRIPT, т.к может подгружать яваскрипт с любого домена."
Работает только в IE и то с окошком про безопасность.

Про JSON забыли.


Автор: TT (не зарегистрирован), дата: 12 января, 2010 - 17:49
#permalink

Может ли в этом деле помочь букмарклет?

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

1-й вопрос
Допустим, при запуске из закладок букмарклет запрашивает фреймсет с нужными фреймами, ПОСЛЕ ЧЕГО во фрейм с чужим документом добавляет свой скрипт, который через сёрвер моего домена сообщает о событиях и принимает команды. ПОСЛЕ ЧЕГО - возможно ли?

2-й вопрос
Вопрос от незнания JS (равно как и первый), но ответьте: может ли букмарклет создать объект, доступный каждому фрейму и при этом не принадлежащий ни одному домену? Например, он сам может не умирать после вышеперечисленных действий и реализовать в себе такой объект? Это позволило бы установить канал связи, минуя сетевой обмен.

Я не ищу хакерского решения - мне нужна стабильность во времени и в пространстве существующих браузеров.
Я рассуждаю так: пользователь, устанавливая букмарклет, предупреждается, о возможной угрозе. Запуск механизма он инициирует тоже сам, сознательно. Как-бы Сабмит жмёт. Скрипт, который и так подсаживается в целевую страницу уже может ею манипулировать, так что осознанность действий юзера уже фактически одобрена политикой безопасности. Так в чём особая проблема разрешить взаимодействие с фреймом из домена, с которым - с доменом - и так уже установлена через скрипт в целевой странице связь?


Автор: KOLANICH, дата: 25 января, 2010 - 17:52
#permalink

нельзя не упомянуть специфический способ для GreaseMonkey скриптов

GM_xmlhttpRequest({
  method: "POST",
  url: serveraddr,
  data: params,
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  onload:function(response){....});

Автор: al (не зарегистрирован), дата: 1 марта, 2010 - 09:54
#permalink

Максимум два соединения - это параллельные независимые соединения между различными доменами? Для одно домена их хоть десяток наделать можно, правда последовательных, будут висеть в ожидании, пока не закроется предыдущее.
Кроссдоменность с document.domain получается неработает без фреймов? Если на странице создать первое XHR соединение с site.ru, затем document.domain="forum.site.ru" и попробовать после этого создать второй XHR с запросом на forum.site.ru, то получаем запрет доступа.


Автор: Росток (не зарегистрирован), дата: 14 октября, 2010 - 02:34
#permalink

привет. скажите пожалуйста сколько данных (объем/кол-во) можно передать используя метод SCRIPT?


Автор: mycoding, дата: 15 мая, 2011 - 09:52
#permalink

Думаю, что следуюет указать, что Script транспорт - это единственный реально используемый метод для кросс-доменных запросов.

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

Также следует упомянуть слово JSONP.


Автор: Neznayka (не зарегистрирован), дата: 6 июля, 2011 - 22:55
#permalink

Не получается получить доступ к содержимому ифрейма в который загружен документ с той же локальной папки что и основной документ. Пишут броузеры что не совпадает протокол, порт, или домен. Тоже самое с сервера работает нормально.
Устанавливал document.domain и contentDocument.domain в localhost - не помогает.
Можно каким то другим способом положить html код из одного локального документа в JS переменную другого? Спасибо.


Автор: osama shk (не зарегистрирован), дата: 14 января, 2020 - 15:51
#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?
tratamiento del ataque de ansiedad


Автор: Deff, дата: 1 января, 2013 - 20:22
#permalink

Идеи кроссдоменного обмена через анонимайзер + фрейм: http://javascript.ru/forum/project/34378-krossdomenyjj-obmen-cherez-anon...


Автор: yloboda, дата: 2 апреля, 2014 - 11:45
#permalink

А где скрипт xmlhttp.js? У меня ошибка в iframe сервер не найден..


Автор: osama shk (не зарегистрирован), дата: 27 января, 2020 - 12:00
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post.
rico chandra kusuma


Автор: nojesip (не зарегистрирован), дата: 28 января, 2020 - 18:53
#permalink

I was surfing net and fortunately came across this site and found very interesting stuff here. Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information.
síntomas de un ataque de ansiedad


Автор: osama shk (не зарегистрирован), дата: 30 января, 2020 - 14:46
#permalink

Thanks for sharing nice information with us. i like your post and all you share with us is uptodate and quite informative, i would like to bookmark the page so i can come here again to read you, as you have done a wonderful job.
adoption attorney colorado springs


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

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.
https://champagne-pools.com


Автор: osamm khi (не зарегистрирован), дата: 2 февраля, 2020 - 18:19
#permalink

Pretty nice post. I just stumbled upon your weblog and wanted to say that I have really enjoyed browsing your blog posts. After all I’ll be subscribing to your feed and I hope you write again soon!
causas de los ataques de ansiedad


Автор: osama shk (не зарегистрирован), дата: 3 февраля, 2020 - 19:29
#permalink

Thanks for taking the time to discuss that, I feel strongly about this and so really like getting to know more on this kind of field. Do you mind updating your blog post with additional insight? It should be really useful for all of us.
Airline Tickets


Автор: osama shk (не зарегистрирован), дата: 8 февраля, 2020 - 18:42
#permalink

The website is looking bit flashy and it catches the visitors eyes. Design is pretty simple and a good user friendly interface.
Digital Marketing


Автор: osama shk (не зарегистрирован), дата: 9 февраля, 2020 - 13:43
#permalink

I found that site very usefull and this survey is very cirious, I ' ve never seen a blog that demand a survey for this actions, very curious...
trực tiếp bóng đá 789


Автор: osama shk (не зарегистрирован), дата: 10 февраля, 2020 - 16:25
#permalink

I am definitely enjoying your website. You definitely have some great insight and great stories.
Dhamma


Автор: osama shk (не зарегистрирован), дата: 10 февраля, 2020 - 19:41
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
download facebook video


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

Thanks so much for this information. I have to let you know I concur on several of the points you make here and others may require some further review, but I can see your viewpoint.
Digital Marketing


Автор: osama shk (не зарегистрирован), дата: 12 февраля, 2020 - 13:08
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post.
Body Line


Автор: osama shk (не зарегистрирован), дата: 12 февраля, 2020 - 14:11
#permalink

I found that site very usefull and this survey is very cirious, I ' ve never seen a blog that demand a survey for this actions, very curious...
click this site


Автор: johnyjackson, дата: 17 февраля, 2020 - 12:30
#permalink

Автор: osama shk (не зарегистрирован), дата: 15 февраля, 2020 - 16:10
#permalink

I am happy to find this post very useful for me, as it contains lot of information. I always prefer to read the quality content and this thing I found in you post. Thanks for sharing.
click this site


Автор: osama shk (не зарегистрирован), дата: 15 февраля, 2020 - 17:47
#permalink

You completed a few fine points there. I did a search on the subject and found nearly all persons will go along with with your blog.
find here


Автор: osama shk (не зарегистрирован), дата: 15 февраля, 2020 - 18:39
#permalink

Fantastic blog! Do you have any tips and hints for aspiring writers? I’m planning to start my own website soon but I’m a little lost on everything. Would you propose starting with a free platform like WordPress or go for a paid option? There are so many options out there that I’m completely overwhelmed .. Any suggestions? Many thanks!
filing for divorce in colorado


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

Nice to be visiting your blog again, it has been months for me. Well this article that i've been waited for so long. I need this article to complete my assignment in the college, and it has same topic with your article. Thanks, great share.
bitcoin news


Автор: osama shk (не зарегистрирован), дата: 17 февраля, 2020 - 16:53
#permalink

I admit, I have not been on this web page in a long time... however it was another joy to see It is such an important topic and ignored by so many, even professionals. professionals. I thank you to help making people more aware of possible issues.
visit here


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

I have not any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us.
see this


Автор: osama shk (не зарегистрирован), дата: 17 февраля, 2020 - 18:34
#permalink

I was surfing net and fortunately came across this site and found very interesting stuff here. Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information.
go to my blog


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

Thanks for sharing this quality information with us. I really enjoyed reading. Will surely going to share this URL with my friends.
thefancyvoyager.com


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

Thank you for taking the time to publish this information very useful!
find this


Автор: johnyjackson, дата: 18 февраля, 2020 - 15:31
#permalink

Nice Review


Автор: osama shk (не зарегистрирован), дата: 24 февраля, 2020 - 13:59
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
best hair dryer with diffuser


Автор: osama shk (не зарегистрирован), дата: 25 февраля, 2020 - 11:48
#permalink

I found that site very usefull and this survey is very cirious, I ' ve never seen a blog that demand a survey for this actions, very curious...
dji mavic air


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

Thank you very much for writing such an interesting article on this topic. This has really made me think and I hope to read more.
bioharzard cleanup


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

This one is good. keep up the good work!..https://trulylovelykitchen.com


Автор: osama shk (не зарегистрирован), дата: 25 февраля, 2020 - 19:45
#permalink

This is a smart blog. I mean it. You have so much knowledge about this issue, and so much passion. You also know how to make people rally behind it, obviously from the responses.
wireless hair dryer


Автор: osama shk (не зарегистрирован), дата: 1 марта, 2020 - 13:07
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
psicologos en Madrid para adolescentes


Автор: johnb (не зарегистрирован), дата: 26 февраля, 2020 - 15:44
#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.
Boiler installation


Автор: osama shk (не зарегистрирован), дата: 26 февраля, 2020 - 19:24
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
psicologos en Madrid para adolescentes


Автор: bubble shooter (не зарегистрирован), дата: 29 февраля, 2020 - 10:43
#permalink

Very good article forum. I will continue to monitor the article. Here you can consult my article and give comments. Thanks.bubble shooter


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

No doubt this is an excellent post I got a lot of knowledge after reading good luck. Theme of blog is excellent there is almost everything to read, Brilliant post.
Orange County Air Conditioning Home Service


Автор: osama shk (не зарегистрирован), дата: 5 марта, 2020 - 19:47
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
婚約指輪 福岡


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

hello!! Very interesting discussion glad that I came across such informative post. Keep up the good work friend. Glad to be part of your net community.
best gas grill rotisserie


Автор: osama shk (не зарегистрирован), дата: 16 марта, 2020 - 11:11
#permalink

Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.
anti rayap


Автор: Sophie Miller (не зарегистрирован), дата: 16 марта, 2020 - 14:04
#permalink

Admission Scores
Thanks for the useful information! You helped me with advice!


Автор: jiol (не зарегистрирован), дата: 17 марта, 2020 - 12:42
#permalink

This is a great thing, I think everyone feels this information is very valuable, thank you run 3


Автор: osama shk (не зарегистрирован), дата: 22 марта, 2020 - 19:34
#permalink

You completed a few fine points there. I did a search on the subject and found nearly all persons will go along with with your blog.
ハワイアンジュエリー 結婚指輪


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

I wish more authors of this type of content would take the time you did to research and write so well. I am very impressed with your vision and insight.
olcsó fogaszati szoftver


Автор: osama shk (не зарегистрирован), дата: 3 апреля, 2020 - 22:32
#permalink

If you set out to make me think today; mission accomplished! I really like your writing style and how you express your ideas. Thank you.
promocii


Автор: osama shk (не зарегистрирован), дата: 11 апреля, 2020 - 23:37
#permalink

Nice to be visiting your blog once more, it has been months for me. Well this article that ive been waited for therefore long. i want this article to finish my assignment within the faculty, and it has same topic together with your article. Thanks, nice share.
kqxsmb


Автор: phan manh (не зарегистрирован), дата: 25 апреля, 2020 - 06:15
#permalink

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

Thank you very much. I have been working on this for days. I just follow to your blog.


Автор: Lisa Marie (не зарегистрирован), дата: 23 мая, 2020 - 23:12
#permalink

I was surfing net and fortunately came across this site and found very interesting stuff here. Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information.


Автор: Гость idaho dui laws (не зарегистрирован), дата: 24 мая, 2020 - 09:10
#permalink

Nice to be visiting your blog once more, it has been months for me. Well this article that ive been waited for therefore long. i want this article to finish my assignment within the faculty, and it has the same topic together with your article. Thanks
idaho dui laws


Автор: Гость idaho dui laws (не зарегистрирован), дата: 24 мая, 2020 - 09:16
#permalink

I wish more authors of this type of content would take the time you did to research and write so well. I am very impressed with your vision and insight.
idaho dui laws


Автор: walter brugger (не зарегистрирован), дата: 10 июня, 2020 - 11:33
#permalink

Thank you very much. I have been working on this for days. I just follow to your post. Roof replacement


Автор: johnbruce363, дата: 9 июля, 2020 - 10:07
#permalink

This solved the problem I was having for my personal project ! Thank you !
https://powerwashkansascity.com/index.html


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

I am just genuinely thrilled to come across this great site along with does get pleasure from looking at valuable content put up below. Your concepts in the publisher ended up being wonderful, cheers to the talk about. Vinhome Cần Giờ


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

Kansas City Chiefs Game Live Streaming Football Online Chiefs Game Live The Kansas City Chiefs are a professional NFL team based in Kansas City, Missouri. You can watch Kansas City Chiefs game live streaming online. Get the latest Kansas City Chiefs schedule, TV channel, news update here.


Автор: 49ers Game (не зарегистрирован), дата: 13 июля, 2020 - 19:41
#permalink

San Francisco 49ers Game Live Streaming Football Online 49ers Game Live The San Francisco 49ers are a professional NFL team based in the San Francisco Bay Area. You can watch San Francisco 49ers game live streaming online. Get the latest San Francisco 49ers schedule, TV channel, news update here.


Автор: Chicago Bears Game (не зарегистрирован), дата: 13 июля, 2020 - 19:43
#permalink

Chicago Bears Game Live Streaming Football Online Bears Game Live The Chicago Bears are a professional NFL team based in Chicago. You can watch Chicago Bears game live streaming online. Get the latest Chicago Bears schedule, TV channel, news update here.


Автор: Steelers Game Live (не зарегистрирован), дата: 13 июля, 2020 - 19:46
#permalink

Pittsburgh Steelers Game Live Streaming Football Online Steelers Game Live The Pittsburgh Steelers are a professional NFL team based in Pittsburgh. You can watch Pittsburgh Steelers game live streaming online. Get the latest Pittsburgh Steelers schedule, TV channel, news update here.


Автор: Texans Game (не зарегистрирован), дата: 13 июля, 2020 - 19:48
#permalink

Houston Texans Game Live Streaming Football Online Texans Game Live The Houston Texans are a professional NFL team based in Houston. You can watch Houston Texans game live streaming online. Get the latest Houston Texans schedule, TV channel, news update here.


Автор: Eagles Game (не зарегистрирован), дата: 13 июля, 2020 - 19:50
#permalink

Philadelphia Eagles Game Live Streaming Football Online Eagles Game Live The Philadelphia Eagles are a professional NFL team based in Philadelphia. You can watch Philadelphia Eagles game live streaming online. Get the latest Philadelphia Eagles schedule, TV channel, news updates.


Автор: Bills Game (не зарегистрирован), дата: 13 июля, 2020 - 19:51
#permalink

Buffalo Bills Game Live Streaming Football Online Bills Game Live The Buffalo Bills are a professional NFL team based in the Buffalo Niagara Falls metropolitan area. You can watch Buffalo Bills game live streaming online. Get the latest Buffalo Bills schedule, TV channel, news update here.


Автор: Chargers Game (не зарегистрирован), дата: 13 июля, 2020 - 19:52
#permalink

Los Angeles Chargers Game Live Streaming Football Online Chargers Game Live The Los Angeles Chargers are a professional NFL team based in the Los Angeles metropolitan area. You can watch Los Angeles Chargers game live streaming online. Get the latest Los Angeles Chargers schedule, TV channel, news update here.


Автор: Titans Game (не зарегистрирован), дата: 13 июля, 2020 - 19:54
#permalink

Tennessee Titans Game Live Streaming Football Online Titans Game Live The Tennessee Titans are a professional NFL team based in Nashville, Tennessee. You can watch Tennessee Titans game live streaming online. Get the latest Tennessee Titans schedule, TV channel, news update here.


Автор: Stream NFL (не зарегистрирован), дата: 23 июля, 2020 - 10:12
#permalink

The National Football League is a professional American football league consisting of 32 teams, divided equally between the National Football Conference and the American Football Conference. NFL Games Live Stream


Автор: Sandy, дата: 30 июля, 2020 - 13:30
#permalink

this will help me finish my project.


Автор: NBA Games Tonight (не зарегистрирован), дата: 23 июля, 2020 - 10:14
#permalink

The National Basketball Association is an American men's professional basketball league. It is composed of 30 teams and is one of the four major professional sports leagues in the United States and Canada. It is widely considered to be the premier men's professional basketball league in the world. NBA Games Live Stream


Автор: m.olinas888z (не зарегистрирован), дата: 30 июля, 2020 - 13:24
#permalink

With this code I can continue my previous project.. i am working on the new website and many more.


Автор: johnb (не зарегистрирован), дата: 10 августа, 2020 - 13:52
#permalink

Super-Duper site! I am loving it!! Will come back again, I'm taking your feed also, Thanks.


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

That appears to be excellent however i am still not too sure that I like it. At any rate will look far more into it and decide personally!
click this site


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

Wow the blog you give us is amazing, no wonder many people want to read this. https://celebrityinsider.org/


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

Wow the blog you give us is amazing, no wonder many people want to read this. https://celebrityinsider.org/


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

I will recomend this blog to all of my friends. Great article.
https://happygamer.com/


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

I will recomend this blog to all of my friends. Great article.
https://happygamer.com/


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

Thank you for this inspiring blog. I wait for more
https://ballstepded.com/


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

Thank you for this inspiring blog. I wait for more
https://ballstepded.com/


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

Thank you for this inspiring blog. I wait for more
https://ballstepded.com/


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

I learned so much from this blog. Good inforamtion. https://fixoserror.com/


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

I learned so much from this blog. Good inforamtion. https://fixoserror.com/


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

I wait for more.Great article.
https://premiereretail.com


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

I wait for more.Great article.
https://premiereretail.com


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

I stumbled across this blog.Great article. https://tecsprint.com


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

I stumbled across this blog.Great article. https://tecsprint.com


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

Thank you for this amazing blog. Congratulations.
https://howtolose10poundsinaweek.com


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

Thank you for this amazing blog. Congratulations.
https://howtolose10poundsinaweek.com


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

The things i see here are very informative. Keep going. https://bargainistafashionista.com


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

The things i see here are very informative. Keep going. https://bargainistafashionista.com


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

I can say that is one of the best articles out on the internet. https://bankncard.com


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

I can say that is one of the best articles out on the internet. https://bankncard.com


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

I readed all the article. So informative https://vhan.net


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

I readed all the article. So informative https://vhan.net


Автор: Гость (не зарегистрирован), дата: 10 сентября, 2020 - 16:21
#permalink

This is one of the best sites i have found on the internet until now. Nice article keep going.
https://millikenconstructioninc.com/


Автор: Гость (не зарегистрирован), дата: 10 сентября, 2020 - 16:21
#permalink

This is one of the best sites i have found on the internet until now. Nice article keep going.
https://millikenconstructioninc.com/


Автор: Гость (не зарегистрирован), дата: 11 сентября, 2020 - 16:15
#permalink

Thanks for the information, very clear and simple. I will try to use it.Love the way you write. Working my way through your article links
https://vvhen.to/


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

Thanks for the information, very clear and simple. I will try to use it.Love the way you write. Working my way through your article links
https://vvhen.to/


Автор: Гость (не зарегистрирован), дата: 15 сентября, 2020 - 12:09
#permalink

This is one of the best articles i found on the blogs around the internet. I am really interested in seeing more of this. Keep going with the great work!
https://gzgjskpzz1m.ga


Автор: Гость (не зарегистрирован), дата: 15 сентября, 2020 - 12:09
#permalink

This is one of the best articles i found on the blogs around the internet. I am really interested in seeing more of this. Keep going with the great work!
https://gzgjskpzz1m.ga


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 10:56
#permalink

First of all ,you have picked a very unique theme . I think i might design something similar for a future project that i want to build .
On top of that ,i in truth enjoy most of your content pieces and your different point of view.
Thank you https://seoconsultants24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 10:56
#permalink

First of all ,you have picked a very unique theme . I think i might design something similar for a future project that i want to build .
On top of that ,i in truth enjoy most of your content pieces and your different point of view.
Thank you https://seoconsultants24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 11:34
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.https://seokarma24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 11:34
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.https://seokarma24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 15:20
#permalink

I have reviewed the article many times and I find it very impressive. The information is extremely useful especially the last part I care about that information very much. I have been looking for this certain information for a long time.
https://packseo.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 15:20
#permalink

I have reviewed the article many times and I find it very impressive. The information is extremely useful especially the last part I care about that information very much. I have been looking for this certain information for a long time.
https://packseo.blogspot.com/


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

I’m gone to tell my little brother, that he should
also pay a quick visit this blog on regular basis to take updated from hottest information.
https://connectorseo.blogspot.com/


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

I’m gone to tell my little brother, that he should
also pay a quick visit this blog on regular basis to take updated from hottest information.
https://connectorseo.blogspot.com/


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

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://digitalseo24h.blogspot.com/


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

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://digitalseo24h.blogspot.com/


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

Fantastic blog! Do you have any helpful hints for aspiring writers?
I’m hoping to start my own site soon but I’m a little lost on everything.
https://sweetseo24h.blogspot.com/


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

Fantastic blog! Do you have any helpful hints for aspiring writers?
I’m hoping to start my own site soon but I’m a little lost on everything.
https://sweetseo24h.blogspot.com/


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

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.
https://fancyseo24h.blogspot.com/


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

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.
https://fancyseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 29 сентября, 2020 - 16:25
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://phoenixseogeek.com/


Автор: Гость (не зарегистрирован), дата: 29 сентября, 2020 - 16:25
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://phoenixseogeek.com/


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

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
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
Антиспам
3 + 5 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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