Можно ли скрыть / закрыть iframe изнутри себя или на стороне сервера? - PullRequest
4 голосов
/ 15 ноября 2008

Предположим, у меня есть страница, для которой я пишу плагин javascript для домена first.com. Плагин javascript внедряет iframe, указывающий на страницу входа (домена second.com), на страницу first.com и отображает ее как всплывающее окно, чтобы пользователь мог войти в систему.

Можно ли как-нибудь скрыть / закрыть iframe после того, как пользователь войдет в него? Я могу добавить любой необходимый javascript на страницу first.com и контролировать код клиента и сервера на странице входа в систему в iframe.

Основная проблема заключается в том, что iframe не может получить доступ к своему родительскому окну, чтобы скрыть себя, и родительское окно не может видеть никаких изменений, внесенных в содержимое iframe из-за той же политики происхождения. Есть ли что-нибудь вокруг этого или я должен просто потерять идею iframe и вместо этого открыть новое окно?

Ответы [ 2 ]

2 голосов
/ 01 июня 2009

Если разработчик second.com может быть убежден в том, что загрузит iframe на своей странице входа в систему, которая загружает страницу на first.com, внутренний iframe может вызывать javascript с внешней стороны, так как они оба с first.com , Таким же образом вы можете передавать параметры через URL внутреннего iframe. пример здесь.

1 голос
/ 15 ноября 2008

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что браузер останавливает междоменную связь. Есть способ подписать ваш javascript , но он в значительной степени нарушает модель безопасности браузера и не предлагается, если в этом нет крайней необходимости.

Есть ли способ, чтобы форма входа в систему основывалась на представлении URL? Вы можете создать простую форму для входа и использовать AJAX, чтобы получить ответ, чтобы обеспечить успешный вход в систему. Это решение зависит от наличия логина RESTful, и опять же, я не уверен насчет реализации вашего second.com.

Если вам интересно, как использовать ajax для отправки формы, я бы проверил this (это в jQuery, но оно применимо практически ко всем фреймворкам.) и посмотрите, может ли это сработать в вашей ситуации.

...