Ruby on rails 4应用程序在iframe中无法运行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

如何通过iframe将我的Rails应用程序嵌入到另一个网站?

它很好地适用于ROR 3,但不适合ROR 4:

<iframe src="http://myrailsapp.com/" width="100%" height="50" id="rails_iframe">error!</iframe>
提问于
用户回答回答于

这与Rails 4默认启用额外的安全协议有关:weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/

打破远程站点iFrames的设置是X-Frame-Options。默认情况下,它被设置为SAMEORIGIN,从而防止内容加载跨域:

config.action_dispatch.default_headers = {
    'X-Frame-Options' => 'SAMEORIGIN'
}

可以更改默认标题以允许跨域的X-Frame。

config.action_dispatch.default_headers = {
    'X-Frame-Options' => 'ALLOWALL'
}
用户回答回答于

Rails 4 添加了默认的X-Frame-OptionsHTTP头部值SAMEORIGIN。这对安全性有好处,你可以这样做:

允许所有源:

class MyController < ApplicationController
  def iframe_action
    response.headers.delete "X-Frame-Options"
    render_something
  end
end

允许特定来源:

class MyController < ApplicationController
  def iframe_action
    response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://some-origin.com"
    render_something
  end
end

当你需要使用一个以上的actioniframe,这是一个好主意,使一个方法,并调用它:after_filter

class ApplicationController < ActionController::Base

  private
  def allow_iframe
    response.headers.delete "X-Frame-Options"
  end
end

像这样在你的控制器中使用它:

class MyController < ApplicationController
  after_filter :allow_iframe, only: [:basic_embed, :awesome_embed]

  def basic_embed
      render_something
  end

  def awesome_embed
      render_something
  end

  # Other Actions...
end

扫码关注云+社区