【问题标题】:Detecting if this is an iframe load or direct检测这是 iframe 加载还是直接加载
【发布时间】:2010-12-20 23:58:24
【问题描述】:

我希望仅在 iframe 内的页面上拉出表单时才显示该表单。我怎么做?有服务器端解决方案吗?

【问题讨论】:

    标签: ruby-on-rails ruby iframe


    【解决方案1】:

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

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

    如果窗口不是最顶层的窗口,它只会隐藏 ID 为“myform”的表单。

    【讨论】:

      【解决方案2】:

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

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

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

      用于头部的 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
      

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          但是:不要这样做。将网站放入 (i) 框架中有很多合法用途。在这种情况下跳出此类 iframe 或以任何方式更改您的网站只会让您的用户不高兴。

          【讨论】:

          • 我同意:让页面的内容依赖于输入参数以外的任何内容是糟糕的 Web 应用程序设计(不是 REST)。
          猜你喜欢
          • 2012-08-29
          • 2016-03-28
          • 2011-05-31
          • 1970-01-01
          • 1970-01-01
          • 2012-10-24
          相关资源
          最近更新 更多