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

Lau*_*ura 6 ruby iframe ruby-on-rails

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

ste*_*tef 5

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

$(document).ready(function(){ 
    if( window == window.top) { $('form#myform').hide(); }
});
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*low 2

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

假设您有一个专用的 iframe 布局模板,例如“layouts/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>
Run Code Online (Sandbox Code Playgroud)

注意参数 :iframe_fail ,您可以在控制器中检查它,如果该参数存在,您可以做任何您想做的事情,例如显示 flash 消息或重定向

示例控制器

def iframe_action
  if params[:iframe_fail]
         flash[:notice] = 'can only load inside app'
      else
       #do something else
      end
end
Run Code Online (Sandbox Code Playgroud)

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