【问题标题】:Rails 3.1 Having iframe in view makes layout stop renderingRails 3.1 在视图中有 iframe 会使布局停止渲染
【发布时间】:2011-11-14 13:49:25
【问题描述】:

所以我有一个基本的布局文件:

<!DOCTYPE html>
<html dir="ltr" lang="en-US">
<head>
  <%= stylesheet_link_tag    "logged_out" %>
  <%= javascript_include_tag "application" %>
  <%= stylesheet_link_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/ui-lightness/jquery-ui.css" %>
</head>
<body>
  <!-- header stuff here -->
  <%= yield %>
  <!-- footer stuff here -->
</body>
</html>

任何普通的 html 都可以。但是,如果我将这样的 iframe 添加到视图中:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview"/>

当我渲染页面时,所有内容都会渲染到 iframe,但 yield 之后的页脚内容不会渲染。有没有人遇到过这种情况?

编辑:正如其中一个答案所指出的(谢谢!),我在最初的问题中的收益声明是错误的。我的代码中的 yield 语句是正确的,但在转移到 stackoverflow 时这是一个错字。

注意:如果您尝试复制 iframe,则使用 jquery mobile。

【问题讨论】:

  • 查看呈现的页面源 - 在页面加载之前不应获取 iframe。

标签: ruby-on-rails layout iframe ruby-on-rails-3.1 render


【解决方案1】:

问题在于您如何包含&lt;iframe&gt;。你认为你包含了自闭标签,它就到此为止了。但是您不会将页面作为 XML 发送,并且 HTML 没有自闭合标签的概念,最后只是垃圾。所以你的:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview"/>

实际上解释为:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview">

页面的其余部分被解释为&lt;iframe&gt; 标记内的被忽略内容。这就是为什么你不应该在 HTML 文档中使用自闭合标签的原因——它们并没有像你认为的那样工作。

改成:

<iframe id="form" height="480" width="320" src="/mobile_preview/preview"></iframe>

如果您使用 Firebug 或 Chrome Inspector 查看已解析的 DOM 树,您可以找到它。

作为奖励:它与 Rails 无关,服务器返回响应就像以前一样,您可以在日志中看到它。这只是浏览器如何解释您的标记的问题。

【讨论】:

  • 感谢 MBO! Stackoverflow 会让我等待 22 小时,但我会尽可能奖励你。
  • @MBO,非常感谢……我为这个恼人的问题苦苦挣扎了很长一段时间……真是个愚蠢的错误 :)
【解决方案2】:

你在关闭 ruby​​ 代码处有错误

<%= yield =>

正确的是

<%= yield %>

【讨论】:

  • 糟糕,在简化 SO 时是一个错字。我的真实代码有正确的产量。我会更新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多