Pull to refresh

Взаимодействие между web-приложениями через Web Intents

Reading time3 min
Views3K
Original author: James Hawkins, Software Engineer @ Google
Прим.: Обычно не занимаюсь переводами, но новость проскочила интересная.

В сегодняшней браузерной экосистеме веб-приложения полностью изолированы друг от друга, и для того, чтобы, к примеру, отправить комментарий в твиттер через сторонний сервис со своего сайта, необходимо использование сложных (Прим.: ну я бы просто сказал «разнообразных») 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 на своем сайте могут воспользоваться вот этой заплаткой для браузеров, которые не поддерживают данную фичу.

Мы быстро прототипизируем эту фичу, поэтому проверьте спину скоро для объявления когда Web Intents станет доступным за флагом в Chrome. Мы интенсивно работаем над прототипом, так что ждите анонса, когда Web Intents станут опцией в Chome, в ближайшее время!

[1] — intent — дословно «намерение». Пишите в комментариях, как лучше перевести этот термин… если вообще это нужно переводить
Tags:
Hubs:
+29
Comments20

Articles

Change theme settings