Обнаружение, является ли это загрузка iframe или прямой - PullRequest
5 голосов
/ 21 декабря 2010

Я хочу показать форму только в том случае, если она была перетащена на страницу в фрейме.Как я могу это сделать?Есть ли решение на стороне сервера?

Ответы [ 4 ]

5 голосов
/ 21 декабря 2010

Если вы используете JQuery ... (инструкции по установке здесь: http://jquery.com/)

$(document).ready(function(){ 
    if( window == window.top) { $('form#myform').hide(); }
});

Который просто скрывает форму с идентификатором "myform", если окно не самое верхнее окно.

2 голосов
/ 21 декабря 2010

Я не могу думать о чисто серверном подходе, но вы могли бы использовать немного гибридных javascript / rails.

при условии, что у вас есть выделенный шаблон макета iframe, например 'layouts / iframe.erb'

Вы могли бы поместить некоторый javascript в голову, чтобы проверить, загружается ли он как iframe, и, если это не так, перенаправить на действие и, возможно, отобразить флэш-сообщение "может загрузить эту страницу только внутри приложения"

JavaScript / рельсы для головы

    <script type="text/javascript">

        function parentExists()
        {
         return (parent.location == window.location)? true : false;
        };

        function check_modal(){
        if (parentExists()) {
          window.location = '<%= url_for( :controller => "home", :action => 'iframe_action', :iframe_fail => 'true')%>'}
        }
        check_modal()
    </script>

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

пример контроллера

def iframe_action
  if params[:iframe_fail]
         flash[:notice] = 'can only load inside app'
      else
       #do something else
      end
end

Не очень красиво, но может помочь вам выполнить работу.

0 голосов
/ 18 ноября 2014

Мой тег iframe был похож на

%iframe{:height => "98%", :width => "98%",:"id" => "profileIframe"}

Я хотел скрыть заголовок моей веб-страницы в этом iframe, поэтому я использовал код как:


var $frame = $(window.parent.frames["profileIframe"]).contents();  
$frame.find('.header-ui').hide();

Если вы наблюдаете, то content () возвращает элемент как "#document", который является html iframe, следовательно, вызов javascript без этого попытается получить доступ к вашей реальной веб-странице, отображаемой на фоне iframe.

0 голосов
/ 21 декабря 2010

Вы можете проверить это только на стороне клиента через JavaScript.

Однако: НЕ ДЕЛАЙТЕ ЭТОГО .Существует множество законных способов размещения сайта в (i) рамке.Выход из такого iframe или любое изменение вашего сайта в таких обстоятельствах приведут к тому, что ваши пользователи будут недовольны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...