Загрузка встроенного фрейма с тем же протоколом, что и в верхней части окна, для предотвращения нарушения политики одного источника
Мы разрабатываем Javascript SDK, который используется встроенными приложениями (внедренными на моем сайте как IFRAME), чтобы помочь им использовать некоторые ресурсы, такие как загрузка некоторых диалогов: например, диалоговое окно авторизации или окно общего доступа (например, Facebook).
Наш SDK использует easyXDM для работы более или менее так:
HTML-страница
-------------------------------------------------- -------------------------------------------------- ------------------------
| http / https: www.mysite.com / встроенное приложение /
| (Некоторые классы JS)
|
| - - - - - | -------------------------------------------------- -------------------------------------------------- --------------
| - - - - - | (IFRAME)
| - - - - - | https: // www.some-embedded-app-domain.com /page.html
| - - - - - | (загружает и создает экземпляр SDK из "http/https:www.mysite.com/sdk.js, который использует easyXDM)
| - - - - - |
| - - - - - | - - - - - | -------------------------------------------- -------------------------------------------------- -----
| - - - - - | - - - - - | (IFRAME вводится easyXDM)
| - - - - - | - - - - - | http / https: www.mysite.com /embedded_provider.html
| - - - - - | - - - - - | (Связь с window.top, чтобы поговорить, чтобы использовать эти классы wndow.top JS)
| - - - - - | - - - - - |
| - - - - - | - - - - - |
| - - - - - | - - - - - |
| - - - - - | - - - - - |
Мой сайт может быть загружен как по http/https, но встроенное приложение должно обслуживаться всегда по HTTPS. Чтобы внутренний фрейм, введенный easyXDM, мог взаимодействовать с моим сайтом, хост и протокол должны совпадать в обоих URL-адресах, в противном случае возникнет одно и то же нарушение политики происхождения.
Проблема: как мне сообщить коду из SDK, который загружен из URL-адреса внешнего приложения, что внешние окна (мой сайт) используют http или https, чтобы отобразить внедренный_провидник.html с использованием того же протокола и, таким образом, разрешить соединение JS между ними обоими?
Единственное решение, о котором я могу подумать, - это как-то проинформировать встроенное приложение о том, что мы в данный момент просматриваем его по http/https, и затем оно может его правильно создать (используя флаг use_https или около того), но я бы предпочел не форсировать Приложение, чтобы узнать протокол, который мы используем.
Вы знаете какую-нибудь другую альтернативу?
Спасибо!
2 ответа
Единственное решение, о котором я могу подумать (хотя я не проверял это), - это вставить easyXDM в два тестовых фрейма - один на http://www.mysite.com/url_test и один на https://www.mysite.com/url_test.
Затем попросите вашу веб-страницу / url_test получить доступ к window.top.location.href. Если / url_test может видеть местоположение, то оно должно быть в том же домене. Затем страница successfull / url_test сообщит родительскому iframe (на some-embedded-app.com) через easyXDM, чтобы создать нужный iframe на правильном хосте.
Примечание: страница / url_test, которая находится на неправильном хосте, начнет выводить предупреждения iframe того же источника в консоли.:)
Примечание #2: если этот подход работает, вы можете итеративно улучшить его, сказав: "Из-за предметной области продукта я знаю, что 80% этих вложений будут на http. Сначала я сделаю / url_test на http, затем попробую https в качестве резервной копии."