Google и Facebook позволяют пользователям «Войти с _____». Обычно разработчик веб-сайта должен включать Javascript и предоставлять обратный вызов для обработки ответа на вход. Из моего понимания безопасности JavaScript в браузерах это не должно быть возможным.Как Google/Facebook выполняет Cross-origin Javascript?
Я прочитал несколько методов передачи JavaScript с перекрестным кодом, например Porthole или easyXDM. В каждом из этих методов разработчик должен размещать небольшой статический HTML-файл, чтобы либо Facebook, либо Google (т. Е. Контент «включено») мог связываться с родительским фреймом. Примером может служить приложение (app.example.com), в которое включен iframe из Google (google.com), который снова включает iframe из приложения (app.example.com). Самый внутренний JavaScript iframe может связываться с самым верхним окном, поскольку они находятся в одном домене (через this.parent.parent
).
+-------------------------------------------------------------+
| https://app.example.com |
+-------------------------------------------------------------+
| |
| +------------(hidden iframe)-----------------------------+ |
| | https://whatever.google.com | |
| +--------------------------------------------------------+ |
| | | |
| | +---------(hidden iframe)--------------------------+ | |
| | | https://app.example.com/receiver | | |
| | +--------------------------------------------------+ | |
| | | | | |
| | | (script that calls this.parent.parent.callback) | | |
| | | | | |
| | +--------------------------------------------------+ | |
| | | |
| +--------------------------------------------------------+ |
| |
+-------------------------------------------------------------+
Однако, это требует, чтобы внутренний IFrame содержит страницу «приемника» на домене app.example.com. Единственная цель - прочитать его URL-адрес, а затем передать данные до родительского окна. Однако с решениями Google и Facebook не требуется статическая HTML-страница. Итак, какой механизм они используют для передачи данных, если не статическая страница-получатель? JavaScript в своем фрейме не должен иметь доступа к исходному JavaScript. Window.PostMessage
кажется dubious at best, видя, что это IE8, IE9 и IE10, являются either broken or quirky.
JSONP и CORS - это два метода для совершения вызовов ajax за пределами происхождения страницы. – jfriend00
Это, как правило, не вызовы AJAX, скорее они обычно используют всплывающее окно, а затем некоторые данные для входа возвращаются из этого всплывающего окна в обратный вызов на родительской странице. – Huckle
Нажмите ссылку «Google» в моем вопросе, а затем нажмите кнопку входа в меню «Попробовать». Это запустит новое всплывающее окно. https://developers.google.com/+/web/signin/add-button – Huckle