【问题标题】:Rails 3 DRY Conditional Layout for iframes用于 iframe 的 Rails 3 DRY 条件布局
【发布时间】:2013-02-04 20:24:48
【问题描述】:

我最近的任务是在另一个网站的 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 调用;不过我想知道是否有人有更好的方法。

【问题讨论】:

    标签: ruby-on-rails-3 iframe dry


    【解决方案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,但我至少能够将逻辑放入控制器方法中。如果有人知道更好的解决方案,请随时留下答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多