Как стать автором
Обновить

Кросс-доменный XMLHttpRequest

Время на прочтение 4 мин
Количество просмотров 2.8K
Чулан
Важной составляющей технологии AJAX является XMLHttpRequest. Этот объект дает возможность осуществлять HTTP-запросы к серверу без необходимости в перезагрузке страницы.
Читать дальше →
Всего голосов 20: ↑9 и ↓11 -2
Комментарии 22

Кроссдоменный AJAX-запрос для Opera.

Время на прочтение 3 мин
Количество просмотров 524
Чулан
Известно, что XmlHttpRequest в Opera срабатывает только в том домене, где открыт яваскрипт. Ниже я приведу способ, как миновать эту оплошность.

Читать дальше →
Всего голосов 16: ↑12 и ↓4 +8
Комментарии 13

Кросс-доменные запросы в Opera UserJS

Время на прочтение 3 мин
Количество просмотров 1.4K
JavaScript *
В отличие от расширения Greasemonkey в мозилле, Опера не предоставляет аналога функции GM_xmlhttpRequest для кросс-доменных запросов (XDR). Это, понятное дело, сильно ограничивает возможности и сферу применения UserJS. Используя XDR, например, можно реализовать Last.fm-скробблер для различных онлайн-проигрывателей музыки (типа vkontakte.ru или MySpace).

Однако кросс-доменные запросы можно заставить работать в Опере с помощью трюков с iframe'ами и window.name транспортом. Под катом я покажу как это сделать и предъявлю простую библиотеку, реализующую все колдовство.
Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 30

UserJS. Часть 2: Трюки

Время на прочтение 7 мин
Количество просмотров 3.5K
Opera
В этой статье я опишу способ переиспользования кода, а также различные трюки, специфичные для userjs.

Другие статьи серии:
Читать дальше →
Всего голосов 16: ↑13 и ↓3 +10
Комментарии 2

UserJS. Часть 4: libretki framework

Время на прочтение 8 мин
Количество просмотров 1.6K
Opera
libretki — это framework, призванный упростить создание userjs и предоставить уже готовый набор полезных функций.

Другие статьи серии:

Ядро



Ядро системы представлено файлом libretki.core.js, который является развитием loader.js из второй статьи. Ядро также предоставляет некоторые базовые функции. Если все, что Вам нужно — это возможность подключать другие файлы, ядра достаточно.

Типовой скрипт с использованием libretki:
if (! ('libretki' in window)) { libretki = { __scripts: [] }; }
libretki.__scripts.push({
    name: 'habrahabr.example',
    requires: ['libretki.utilities'],

    init: function(unsafe) {
      // some code...

      libretki.core.namespace('habrahabr.example', {
        func: function() { /* ... */ },
      });
    }
});


Читать дальше →
Всего голосов 31: ↑27 и ↓4 +23
Комментарии 40

dklab_multiplexor: постоянное Javascript-соединение с сервером в условиях сотен тысяч онлайн-клиентов

Время на прочтение 4 мин
Количество просмотров 6.6K
Высокая производительность *
Dklab_multiplexor — это инструмент, который позволяет держать одновременно сотни тысяч долгоживущих открытых HTTP-соединений с сервером. Например, если на вашем сайте находится одновременно несколько сот тысяч посетителей, каждый из них может быть связан с сервером постоянным соединением, установленным из JavaScript. Это например, полезно при организации онлайн-чатов или мгновенных уведомлений.

Dklab_multiplexor не претендует на полную универсальность или исключительность (кстати, если знаете аналоги, близкие по простоте к multiplexor-у, пишите в комментариях). Это лишь простейший инструмент, который наконец-то дошли руки опубликовать.

Зачем это нужно?


Предположим, посетители вашего сайта могут посылать друг другу сообщения. Если получатель в момент отправки находится на сайте (просматривает какую-либо страницу), ему немедленно выдается уведомление (всплывающее окошко на JavaScript).

Данную задачу можно решить двумя способами.
  1. Неправильный способ. Раз в 10 секунд делать из JavaScript запрос на сервер для проверки, не появилось ли новых сообщений. Этот метод не работает, если на сайте одновременно находится очень большое количество пользователей, т.к. нагрузка на сервер растет слишком быстро. Кроме того, потребление трафика пользователем также оказывается крайне высоким.
  2. Правильный способ. Устанавливать постоянное и длительное соединение с сервером, ожидая поступления данных через него. Если сообщений нет, соединение просто держится открытым на протяжение нескольких минут. Если соединение по каким-либо причинам закрылось, оно вновь открывается. В итоге и трафика потребляется мало, и нагрузка на сервер оказывается невелика. Так работает GMail, Мой Круг и т. д., и именно на этом принципе построен dklab_multiplexor.
+-------------------+                    ------------------ 
| Сервер обработки  |                   |                  |   <===WAIT=== Клиент A
| и базы данных     |  ======IN=======> |   Мультиплексор  |   <===WAIT=== Клиент B
| (e.g Apache + PHP |                   |                  |   <===WAIT=== Клиент C
+-------------------+                    ------------------ 
(указаны направления установления TCP-соединений).
Читать дальше →
Всего голосов 103: ↑97 и ↓6 +91
Комментарии 108

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

Время на прочтение 5 мин
Количество просмотров 13K
Разработка веб-сайтов *
Мужик сидит, слушает радио.
— В Москве полночь, в Благовещенске 6 утра, во Владивостоке, Хабаровске, Южно-Сахалинске 7, в Магадане 8, в Петропавловске-Камчатском 9 часов.
Мужик сидит, сидит, потом встаёт, и с некоторым сожалением произносит:
— Эх, ну и бардак же у нас в стране!

Текст перепечатан с аудиозаписи позывных «Маяка».
Для справки: в Петропавловске-Камчатском теперь UTC+11 (летом UTC+12), поэтому теперь в полночь по московскому времени там было бы 8 часов, а не 9.


Во многих местах на сайтах отображается время. И во многих случаях лучше всего отображать не время по Гринвичу, не время на сервере, а время в часовом поясе пользователя.

Часто предлагается выбрать свой часовой пояс из огромного списка возможных вариантов. Конечно, возможность приятная, но удобнее, если сайт может определить часовой пояс пользователя сам. А сделать это, как можно догадаться, совсем несложно — достаточно получить локальное время и отступ от UTC с помощью JavaScript и передать этот отступ на сервер с помощью XMLHttpRequest.

Читать дальше →
Всего голосов 61: ↑45 и ↓16 +29
Комментарии 35

Кроссдоменный AJAX

Время на прочтение 1 мин
Количество просмотров 111K
Разработка веб-сайтов *
На вопрос, как сделать AJAX запрос к другому домену, я всегда отвечал, что никак, и предлагал в качестве альтернативы jsonp, прокси, флеш, фреймы. Но, оказывается, большинство современных браузеров (IE8+, FF3.5+, Chrome 6+ и Safari 4+) вполне поддерживает кроссдоменный XMLHTTPRequest.

Работает это на удивление просто
Всего голосов 97: ↑90 и ↓7 +83
Комментарии 22

Использование UpdatePanel и иже с ним

Время на прочтение 9 мин
Количество просмотров 20K
.NET *
Каждый, кто занимается веб-программированием, рано или поздно сталкивается с задачей реализации асинхронных запросов на сервер и обработкой возвращаемого результата.
Если смотреть со стороны Asp.net, то ребята из Майкрософт сделали огромную работу для того, чтобы облегчить нам всем жизнь. Однако в моей голове присутствует какая-то маниакальная идея, запрещающая использовать то, принципы работы чего я не понимаю. Таким образом, кривая дорожка завела меня в исследование работы объекта UpdatePanel и иже с ним. Прошурудив множество форумов, я обнаружил десятки изъявлений о том, что «UpdatePanel – SUCKS», подкрепленные различными разрозненными объяснениями. Но ни одно из них так и не заставило меня окончательно разубедиться в отрицательном эффекте его использования. В связи с этим, приняв на веру, что все сказанное различными Анонимусами на форумах верно, я начал рыть.
И вот до чего дошло.
Читать дальше →
Всего голосов 18: ↑10 и ↓8 +2
Комментарии 28

Почему вы должны использовать XMLHttpRequest асинхронно

Время на прочтение 6 мин
Количество просмотров 17K
Блог компании Microsoft Ajax *Разработка веб-сайтов *
Перевод
*Пер.: Мысль этого топика тривиальная и должна быть известна каждому: используйте асинхронные запросы. Но статистика — штука суровая, и, видимо, это знают не все. А последствия, на самом деле, имеют место во всех браузерах.*

8.4% всех зависаний страниц в IE9 за прошедший месяц являются следствием того, что XMLHttpRequest объекты блокируют поток UI синхронным запросом. Это огромное число! С помощью нескольких доступных изменений в коде эти зависания можно легко избежать — и разработчики могут обеспечить своим пользователям намного лучшие впечатления от работы с их сайтами. Мы рассмотрим, что происходит при зависании, что вы можете с этим сделать, и мы также попробуем сделать небольшую демонстрацию, чтобы воочую посмотреть, что происходит, когда синхронный запрос подвешивает браузер.
Читать дальше →
Всего голосов 51: ↑32 и ↓19 +13
Комментарии 86

История одного расследования о странном поведении XMLHttpRequest в новых версиях Firefox

Время на прочтение 8 мин
Количество просмотров 5.2K
Ajax *Firefox JavaScript *

I. Суть проблемы.


В список основных предназначений XMLHttpRequest, конечно, не входит запрос HTML, чаще этот инструмент взаимодействует с XML, JSON или простым текстом.

Однако связка XMLHttpRequest + HTML хорошо работает при создании расширений к браузеру, которые в фоновом режиме опрашивают на предмет новостей сайты, не предоставляющие для этого почтовую подписку, RSS или другие экономные API или предоставляющие эти сервисы с какими-то ограничениями.

При создании нескольких расширений для Firefox я сталкивался с такой необходимостью. Работать с полученным от XMLHttpRequest кодом HTML при помощи регулярных выражений — способ очень ненадёжный и громоздкий. Получить DOM от XMLHttpRequest можно было лишь для правильного XML. Поэтому приходилось следовать хитрым советам на сайте разработчиков. Однако начиная с Firefox 11 появилась возможность непосредственного получения DOM от XMLHttpRequest, а в Firefox 12 была добавлена обработка таймаутов.

Я испытал новую возможность на создании мини-индикаторов новых топиков для двух небольших форумов, и это оказалось очень удобным (50 строчек кода плюс расширение CustomButtons — вот и готовый индикатор за пять минут, с опросами по таймеру и четырьмя состояниями: нет новостей, есть новости, ошибка и таймаут; подробнее можно почитать здесь). Всё работало как часы.

Поэтому я попытался убрать из кода своих расширений все прежние костыли и ввести туда новый удобный парсинг. Однако при работе с сайтом rutracker.org возникла странная проблема (тестирование проходит на последней ночной сборке под Windows XP; очень прошу прощения за все косяки в коде и формулировках: у меня нет программистского образования и опыт мой в этой сфере, к сожалению, очень невелик.).

Читать дальше →
Всего голосов 78: ↑76 и ↓2 +74
Комментарии 38

Индикаторы ключевой информации на сайтах для Firefox на скорую руку

Время на прочтение 21 мин
Количество просмотров 1.7K
Ajax *Firefox JavaScript *
У многих из нас есть на примете набор сайтов, которые мы периодически открываем не для внимательного чтения, а чтобы бегло ознакомиться с каким-то небольшим участком информации, посмотреть, нет ли новых статей или комментариев, проверить, не сменился ли какой-нибудь параметр и так далее. Сайты часто предоставляют для таких нужд rss или почтовую рассылку, но так бывает далеко не всегда. Попробую описать один из способов автоматизации подобной рутины.

Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 5

Парсинг BEncode на JavaScript. Просмотр торрент-файлов в Firefox

Время на прочтение 10 мин
Количество просмотров 5.7K
Firefox JavaScript *

I. Зачем


Есть несколько способов просматривать торрент-файлы: в торрент-клиенте, в BEncode Editor, в файловых менеджерах с плагинами, возможно в сетевых сервисах (но это немножко стрёмно).

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

— узнать содержимое раздачи;
— узнать количество файлов в раздаче;
— узнать информацию о файлах (некоторые трекеры очень снисходительны к неполноте описаний, а в торрент-файлах появляется всё больше информации о файлах — например, разрешение, видео- и аудиокодеки, продолжительность фильмов и т. д.);
— узнать информацию о самом торрент-файле (время создания, трекеры, флаг приватности и т. д.);
— иметь возможность текстового поиска по всей информации.
Читать дальше →
Всего голосов 21: ↑20 и ↓1 +19
Комментарии 13

Подмена XMLHttpRequest или как не трогая тонны готового js-кода изменить поведение всех ajax-запросов

Время на прочтение 7 мин
Количество просмотров 20K
Ajax *JavaScript *
Из песочницы
Здравствуйте, в этой маленькой заметке расскажу немного про ООП в JS, объект XMLHttpRequest, паттерн прокси, и дружелюбие джаваскрипта в этом плане.

Была у меня сегодня такая задача — есть проект, который довольно активно использует ajax-запросы, но вот проблема — бекенд у нас так устроен, что разаутентифицирует пользователя, если тот не активен в течение, скажем, получаса. В итоге случалось такое, что пользователь, пытаясь совершить какое-то действие, которое использует аякс, не мог его совершить (уж извините за тавтологию), нужно было решить эту проблему.
Читать дальше →
Всего голосов 50: ↑43 и ↓7 +36
Комментарии 39

Интеграция приложения на QML с веб-ресурсами

Время на прочтение 14 мин
Количество просмотров 29K
Программирование *Qt *ВКонтакте API *
Туториал
Здравствуй, дорогой хабражитель! Я хочу рассказать, как интегрировать программу на новомодном языке QML с веб-ресурсами.

Сам по себе, QML — это декларативный JavaScript-подобный язык программирования, который входит в фреймворк Qt. Разработчики Qt настроены серьезно и продвигают его как основной инструмент создания интерфейсов. Более того, достаточно много вещей можно сделать не прибегая вообще к C++, в том числе и возможность работы с веб-серверами.

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

Учитывая, что в Qt 5.1, альфа версия которой вышла на прошлой неделе, включена начальная поддержка Android и iOS, эта тема может быть особенно интересна тем, кто присматривается к Qt или активно ее осваивает. В этой статье я расскажу, как можно организовать работу с веб-ресурсами из приложения на QML на примере API ВКонтакте.

На всякий случай отмечу, что я рассматриваю последнюю стабильную версию Qt 5.0.2. В более ранних версиях каких-то возможностей может не быть.
Читать дальше →
Всего голосов 26: ↑24 и ↓2 +22
Комментарии 14

«Ускоряем» открытие тяжелого сайта

Время на прочтение 3 мин
Количество просмотров 17K
JavaScript *
Туториал
На днях потребовалось ускорить открытие сайта. Проблема заключалась в том, что одни только JS-файлы, даже собранные в один и сжатые обфускацией, весили более 500kB, а ведь еще есть css тоже довольно крупный.
В связи с этим, пользователям, у которых файлы закешированы (например новый пользователь или после билда сменилась версия), с медленным интернетом приходилось ждать довольно долго, смотря на белый экран.
Читать дальше →
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 11

Скрещиваем WebWorker и XMLHttpRequest

Время на прочтение 3 мин
Количество просмотров 6.7K
Ajax *JavaScript *HTML *
Из песочницы
WebWorker+XMLHttpRequest

HTML5 уже никого не удивляет, но у многих новичков возникает много вопросов. Особенно вопросы связаные с параллельными потоками, а именно с WebWorker. Дальнейшее повествование требует знания JS и HTML — я не буду разжевывать основы html и js.
Сегодня мы рассмотрим как обернуть в WebWorker обычный XMLHttpRequest.
Читать дальше →
Всего голосов 14: ↑5 и ↓9 -4
Комментарии 12

Пилотируем облачную MongoDB через VanillaJS или как бесплатно сделать приватный todo-лист за 15 минут

Время на прочтение 17 мин
Количество просмотров 15K
Разработка веб-сайтов *JavaScript *MongoDB *API *
Туториал

На фото: Том Круз в фильме Лучший Стрелок

В этой статье мы рассмотрим взаимодействие Single Page HTML Application с облачной MongoDB через JavaScript. В качестве MongoDB-as-a-Service я возьму Mongolab. Стоимость развернутой MongoDB, с объёмом в 500мб, обойдется нам всего-лишь в 0 USD.

Для того, чтобы создать todo-лист, нам не потребуется бекенд. Взаимодействовать с Mongolab мы будем через REST API, а обертку для него в клиентской части мы напишем не прибегая к помощи сторонних JavaScript-фреймворков.

К полету готов
Всего голосов 34: ↑23 и ↓11 +12
Комментарии 7

Особенности withCredentials

Время на прочтение 2 мин
Количество просмотров 28K
Ajax *Разработка веб-сайтов *JavaScript *Браузеры
Многие знакомы с таким флагом XmlHttpRequest как withCredentials, знают для чего он нужен, какие заголовки нужно использовать с ним в паре, чтобы браузер нормально обрабатывал ответы сервера. И я вроде тоже знал, а что не знал — нагугливал, и всё работало как надо. Но однажды столкнулся с неожиданным поведением, о чём и хочу поведать.
Интересности
Всего голосов 9: ↑3 и ↓6 -3
Комментарии 2

Эмуляция CORS на стороне клиента: кроссбраузерное решение некоторых пользовательских задач без расширений

Время на прочтение 40 мин
Количество просмотров 23K
Firefox JavaScript *Internet Explorer Google Chrome Браузеры
Туториал

I. В чём проблема



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

Когда расширение улучшает специфические стороны браузерного интерфейса, без него не обойтись. Но некоторые задачи универсальны, не связаны с частными средствами браузера и, тем не менее, без расширения их тоже не выполнить. Одна из таких задач — кроссдоменные XMLHttpRequest запросы, нарушающие политику одного источника.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 5
1