В сегодняшней браузерной экосистеме веб-приложения полностью изолированы друг от друга, и для того, чтобы, к примеру, отправить комментарий в твиттер через сторонний сервис со своего сайта, необходимо использование сложных (Прим.: ну я бы просто сказал «разнообразных») API. А что если бы мы могли дать сайтам возможность использовать подобные сервисы не зная, какой конкретно сервис мы будем использовать, а зная лишь о том, что он предоставляет некий функционал.
В Android OS эта проблема решается при помощи Intents[1] — архитектуры, позволяющей взаимодействовать компонентам одного или нескольких различных приложений. По этой схеме, клиенсткое приложение создает запрос (к примеру, разослать что-нибудь) и задает параметры, которые будут переданы другому приложению-сервису. После этого пользователю предоставляется список приложений, которые регистрировали свою возможность обрабатывать данный тип intent-запроса. Затем выбранное пользователем приложение запускается в новом контексте, и ему передаются параметры, переданные клиентом в некоем, заранее определенном для конкретного типа intent, формате.
На данный момент мы прилагаем большие усилия для создания аналогичной системы для шеЬ: Web Intents. Эта система предоставит те же удобства, что и Intents для Android, но будет адаптирована для web-приложений.
Мы считаем своей основной и важнейшей задачей разработку простого и удобного в использовании API. При помощи Web Intents, вы можете подключить web-приложение к необходимому сервису используя всего лишь две строки кода! Chome сделает все остальное за вас.
Как и в Android, Web Intents будут покрывать базовый набор действий (таких как редактирование, просмотр и т.д.), которые должны удовлетворить большинство нужд современных сайтов. Однако, с ростом всемирной паутины, сайты предлагают все больше и больше функционала. И поэтому им будет предоставлена возможность создавать новые виды Intent, которые они смогут сами публиковать и документировать. Мы также планируем создать специальный сайт, на котором можно будет просматривать существующие и новые intents.
Рассмотрим в качестве примера сайт, который занимается хостингом фотографий, разработчики которого не в состоянии позволить себе добавить на сайт он-лайновый редактор изображений, но понимают, что без этой возможности сервис не станет популярным. Система Web Intent позволит им получить желаемое, затратив минимум усилий:
var intent = new Intent(Intent.EDIT, ‘image/png’, getImageDataURI()); window.navigator.startActivity(intent, loadEditedImage); // This callback will be called when the service replies with the edited // image data. function loadEditedImage(data) { var image = document.getElementById(‘image’); setImageData(image, data); }
Любой сайт, например, генератор мемов (прим.: ну или демотиваторов, если хотите), который посетит пользователь, сможет объявить возможность обрабатывать intent типа EDIT (редактирование) для файлов с типом image/* используя следующее объявление:
<intent action="http://webintents.org/edit" type="image/*" />
Когда пользователю понадобится отредактировать изображение, этот сервис будет предложен пользователю вместе с другими зарегистрированными редакторами изображений. И если пользователь выберет генератор мемов, в новом контексте откроется соответствующий сайт, который сможет получить данные из intent следующим способом:
var intent = window.intent; memeImg.src = intent.data; memegenForm.onsubmit = function() { // Transform the image - meme it. addMemeTaglines(memeImg, memeTopText, memeBottomText); // Send the generated meme back to the client. intent.postResult(getImageData(memeImg)); };
После вызова postResult(), контекст созданный для мем-генератора будет закрыт, а полученные данные будут переданны нашему приложению через callback, переданный в startActivity(). (Прим.: в данном примере, loadEditedImage)
Ребята из Mozilla тоже работают в этом направлении. Более того, мы тесно сотрудничаем с их инженерами с целью создания единого простого и полезного API.
Предлагаем вам опробовать новую возможность в любом современном браузере на странице с примерами. Желающие попробовать Intents API на своем сайте могут воспользоваться вот этой заплаткой для браузеров, которые не поддерживают данную фичу.
— [1] — intent — дословно «намерение». Пишите в комментариях, как лучше перевести этот термин… если вообще это нужно переводить

