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

时间:2010-12-20 23:58:25

标签: ruby-on-rails ruby iframe

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

4 个答案:

答案 0 :(得分:5)

如果您使用的是JQuery ...(此处的安装说明:http://jquery.com/

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

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

答案 1 :(得分:2)

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

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

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

头部的javascript / rails

    <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,如果存在该参数,请做任何你喜欢的事情,例如:显示flash msg或重定向

示例控制器

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

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

答案 2 :(得分:0)

我的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背景中呈现的实际网页。

答案 3 :(得分:-5)

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

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

相关问题