2011-02-03 4 views
4

У меня есть приложение для рельсов с контентом, с которым другие сайты должны получить доступ через iframe. Контент должен иметь разный макет, если он отображается на веб-сайтах (нет строки меню и т. Д.) Я создал новый файл макета с именем iframe.html.erb Как проверить, вызывается ли страница из внешнего iframe, так что используется правильный файл макета?Разный макет для iframe

ответ

8

Насколько я знаю, когда вы делаете

<iframe src="www.google.pl"></iframe> 

вы не имеете никакого контроля над макета или стилей отображения страницы в IFRAME, если вы не являетесь владельцем страницы и может сделать это выглядеть как угодно.

EDITED

Если вы показывая свой собственный сайт идти, как это:

<iframe src="/some_site_that_i_can_change_code_in?from=iframe"></iframe> 

, а затем в контроллер some_site_that_i_can_change_code_in:

if params[:from] == "iframe" 
    render :layout => "for_iframe" 
else 
    render :layout => "normal" 
end 
+0

Я знаю, как настроить iframe. Мой вопрос был в том, как я могу сказать, что мое приложение rails ссылается на страницу из iframe. – Arwed

+0

Я отредактировал ответ в соответствии с вашим комментарием –

+0

Но я не хочу показывать свой собственный сайт в iframe, когда он вызывается напрямую. – Arwed

0

Я думаю, что единственный способ сделать это с Javascript, а затем перенаправить, но это довольно грязно и не очень хорошая идея. См. Эту тему для получения дополнительной информации: Detecting if this is an iframe load or direct

5

Хороший способ управления конкретным макетом и контентом при обслуживании iframe заключается в регистрации «imrame» mimetype.

## config/initializers/mime_types.rb 

Mime::Type.register 'text/html', "iframe" 

Создайте представление, которое соответствует действию контроллера обслуживается именно: show.iframe.haml. Затем, когда запрос приходит с format: iframe, он отобразит версию iframe.

Таким образом, вы можете точно контролировать, что находится в iframe на других сайтах. Не нужно сходить с ума в контроллере.

Смежные вопросы