Как twitter дает мне обратный вызов для твитов?

кнопка Tweet обычно:

<a href="https://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="someone">Tweet</a>
<script type="text/javascript" src="//platform.twitter.com/widgets.js"></script>

и здесь я могу получить обратный вызов, когда пользователь чирикает:

<script>
  twttr.events.bind('tweet', function(event) {
    console.log(event);
  });
</script>

что я не понимаю: как twitter дает мне этот обратный вызов? Твит делается в другом окне и из другого домена. Как это возможно?

3 ответов


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

в этом случае Twitter JavaScript регистрирует intent С браузер. The intent будучи вы разделяете URL. Когда пользователь нажимает кнопку tweet intent деятельность запускается и отображается новое всплывающее окно.

пользователь нажимает кнопку tweet во всплывающем окне, и браузер отправляет данные события в обратный вызов, указанный при запуске действия. Обратный вызов указан в widget.js и вы подключаетесь к этому событию, используя twttr.events.bind метод.

есть действительно хороший пример того, как это работает на JavaScript github реализация WebIntents.

использование

сегодня

в настоящее время браузеры не поддерживают этот API изначально. Использовать эту систему просто поместите следующий код на свой сайт:

<script src="http://webintents.org/webintents.min.js"></script>

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

декларация

для регистрации приложения-службы уметь обрабатывать изображения совместное использование просто объявляет тег intent.

<intent 
  action="http://webintents.org/share"
  type="image/*" />

это зарегистрирует способность текущей страницы обмениваться изображениями.

ссылка

чтобы создать клиентское приложение, которое может использовать функции общего доступа, оно это так же просто, как использовать следующий код:

var intent = new Intent(
    "http://webintents.org/share", 
    "image/*", 
    "http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Three_jolly_kittens.png/800px-Three_jolly_kittens.png"

);
window.navigator.startActivity(intent);

сервис

когда служба вызывается через startActivity, объект "intent" на окно будет заполнено данными, предоставленными клиентом.

window.intent

окна, открытые через JavaScript (e.g,window.open) получите ссылку на окно, которое создало их в window.opener, которые они могут использовать для "разговора" с родителем.


Я не совсем уверен, что вы здесь делаете, но кросс-доменные JavaScript api выполняются с помощью jsonp:Совместное Использование Ресурсов Разных Источников. http://en.wikipedia.org/wiki/JSONP

изменить 1: JSONP-это подход к доступу к междоменным службам. Простой подход к этой проблеме - использовать циклический опрос. К сожалению, опрос не масштабируется, когда у вас много клиентов. Сохранение постоянного соединения через TCP-сокеты и наличие сервера пуш новые сообщения подписанным клиентам-лучшая альтернатива классическому опросу.

хотя я не использовал WebSockets, именно так сервер может вернуться к данным клиента, если он не реализует round robin.

http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/