检测这是iframe加载还是直接加载

我希望只显示一个表单,如果它被拉到iframe中的页面上。 我怎么做? 有服务器端解决方案吗?

如果你正在使用JQuery …(这里的安装说明: http : //jquery.com/ )

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

如果窗口不是最顶层的窗口,则只隐藏具有id“myform”的表单。

我想不出纯粹的服务器方式,但你可以使用一些混合javascript / rails。

假设您有一个专用的iframe布局模板,例如’layouts / iframe.erb’

你可以在头部放一些javascript来检查它是否被加载为iframe,如果不是,重定向到一个动作并可能显示一个flash msg“只能在应用程序中加载此页面”

头部的javascript / rails

   

注意参数:iframe_fail你可以在控制器中检查并做任何你喜欢的事情,如果存在该参数,例如显示flash msg或redirect

示例控制器

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

不是很漂亮,但可能会帮助你完成工作。

我的iframe标签就像

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

我想在这个iframe中隐藏我的网页标题,因此我将代码用作:

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

如果你观察,那么contents()返回一个元素为“#document”,这是iframe的html,因此调用没有这个的javascript将尝试访问在iframe背景中呈现的实际网页。

您只能通过JavaScript在客户端进行检查。

但是: 不要这样做 。 将网站放在(i)框架中有很多合法用途。 在这种情况下,打破这样的iframe或以任何方式更改您的网站只会让您的用户感到不快。