1

我最近的任务是在另一个网站的 iframe 中加载我的 Rails 应用程序的一部分。相关页面应该使用不同的布局文件,但前提是它们在 iframe 内呈现。这里提出了一个解决方案Detect iframe request in a rails app 涉及传递查询字符串参数。

例如,请求网站可以通过 iframe 调用我的应用程序,其 src 为http://foo.com/bar?iframe=true. 然后在我们的控制器中,我们可以简单地检查:

def bar
  render :template => "iframe" if params[:iframe]
end

这似乎是一个很好的解决方案,但遗憾的是,它仅适用于初始请求,因为原始查询字符串是完全静态的。假设我们有指向 iframe 中其他路由的可访问链接,是否有任何方法可以轻松中继iframe=true请求参数以保持正确的 iframe 布局而无需重复代码?基本上我想在不破坏任何现有功能的情况下尽可能采用 DRYest 方法。我考虑创建另一个 link_to 帮助器,其中包括传递此参数(如果存在)的逻辑,并在整个应用程序中替换我的所有 link_to 调用;我想知道是否有人有更好的方法。

4

1 回答 1

1

我决定使用 JavaScript 来解决这个问题,并将以下内容添加到我的 haml 布局文件中:

:javascript
    for(i = 0; i< $('a').length; i++)
    {
      if($('a')[i].href.match(document.domain))
      {
        $('a')[i].href = $('a')[i].href + "?iframe=true";
      }
    }

这与我对 iframe 参数的服务器端检查相结合,将确保加载适当的布局。我决定只为启用 JavaScript 的用户提供此功能,因此它可能不是最佳解决方案。这种方法的唯一其他问题在于控制器重定向和表单,我必须手动检查 iframe 参数然后相应地转发它 - 根本不是 DRY,但我至少能够将逻辑放入控制器方法中。如果有人知道更好的解决方案,请随时留下答案。

于 2013-02-04T21:26:16.847 回答