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

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

В сегодняшней браузерной экосистеме веб-приложения полностью изолированы друг от друга, и для того, чтобы, к примеру, отправить комментарий в твиттер через сторонний сервис со своего сайта, необходимо использование сложных (Прим.: ну я бы просто сказал «разнообразных») 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 — дословно «намерение». Пишите в комментариях, как лучше перевести этот термин… если вообще это нужно переводить
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 20

    +2
    Звучит интересно. Иногда действительно копипастишь из одного окна браузера в другой и думаешь, что могли бы сами передать инфу. Но вот хотелось бы, чтобы сайт-источник вообще мог не знать об сайте-обработчике. Что-то с ходу не разобрался, получится ли расширение для браузера, которое, скажем, выделенный текст может отправить на пяток сайтов по выбору?
    • UFO just landed and posted this here
        0
        Для конкретного сайта — да. Но добавить туда другой сайт пользователю будет проблематично, даже если добавить туда поля для настройки. Единого API у сайтов нет.
        • UFO just landed and posted this here
        0
        Не совсем расширение. Вы сможете написать на JS код, который будет создавать intent типа Share и передавать в него выделенный на вашей странице текст. Потом пользователю надо будет выбрать, каким сервисом он хочет воспользоваться, чтобы его расшарить.

        Ну вот как-то так =)
          0
          Не, я имел в виду расширение (может букмарклет, может userjs), которое на ничего не подозревающем об intent сайте позволиь сделать пкм (или кнопку выделить и кнопку в тулбаре) по сссылке, выбрать share и тут уже браузер предложит зарегистрированные в нём сайты, готовые расшаривать ссылки.
          • UFO just landed and posted this here
              0
              Насколько я понял, AddThis это инструмент для вебмастеров. Я же о клиентском.
              • UFO just landed and posted this here
                • UFO just landed and posted this here
                    0
                    Не то, неизвестный разработчикам сервис надо прописывать ручками — «блондинки» не справятся.
            0
            Пример: Есть, скажем, какая-то социальная сесть. Пользователь решил сделать вип зафотошопить аватарку и после вернуть где была.
            1. Пользователь берет фотошоп, правит, грузит обратно. Это плохо и не удобно для пользователя — значит хуже не быват
            2. Сайт предоставляет АПИ для разработчиков, чтобы пользователь мог редактировать аватару онлайн. Разработчик веб-фотошопа встраивает свое приложение в соц-сеть, используя АПИ соц сети. Но тут появляется ещё 10 соц сетей со своими АПИ. Разработчик ругается, но точит под все, соц сеть хостит приложение и поддерживает АПИ, но пользователь редактирует онлайн — тоже плохо
            3. Соц сеть использует Web Intents, подключая всевозможные редакторы или позволяет пользователю подключать на свой вкус. Пользователь редактирует онлайн, соц сети не нужно писать АПИ и хостить приложение, разработчику веб-фотошопа не нужно точить под 10 соц сетей. В итоге выгодно всем!
              0
              Вот ещё юзкейсы usecases.webintents.org/
                0
                Это-то всё я понял, но для этого нужно чтобы эти строки
                var intent = new Intent(Intent.EDIT, ‘image/png’, getImageDataURI());
                window.navigator.startActivity(intent, loadEditedImage);
                были на сайте. Я же про расширение, которое выполняло бы их на сайте, на котором их нет. Понятно, что только односторонняя связь возможна. Но лучше, чем полное отсутствие связи.

                Грубо говоря берём ваш третий случай. Пользователь в соцсети, которая ничего не знает о Web Intents, делает ПКМ по аватарке, выбирает «зафотошопить», выбирает веб-фотошоп, редактирует и получает предложение от расширения сохранить файл локально. Уже лучше чем первый ваш случай.
                  0
                  Мне кажется, это возможно. Например, букмарклет Firebug Lite выполняется в контексте текущей страницы, т.е. браузер вроде бы не различает букмарклет от собственных скриптов на странице. Стало быть можно будет.
                    0
                    Основной плюс WebIntents в том, что сайт потом может принять данные от сервиса обратно в ожидаемом формате и обработать их.

                    В случае с аватаром — перезалить не проблема, но ведь будет множество других случаев, где плагин не сможет того, что предлагает WebIntents.

                    Штука крутая, несомненно.
                0
                чтото я недопонял, как фотохостинг узнает о сайте с редактором картинок?
                сайт с редактором каким-то образом должен зарегистрироваться вбраузере,
                чем тогда это отличается от установки расширения в браузере?
                  0
                  Фотохостинг не знает о сайте-редакторе. Он просто создает Intent, в котором говорит «Хочу редактор картинок».

                  В отличие от расширения в браузере, это не расширение и любой сайт-сервис может объявить себя обработчиком соответствующих интентов.
                    0
                    где и как сервис может себя кемто объявить кроме как в браузере?
                      0
                      наверное на сайте создают сервис и отправляют заявку на добавление в Intents

                Only users with full accounts can post comments. Log in, please.