Как 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/