我如何通过iframe将我的rails应用程序嵌入到另一个网站?
它在RoR 3上运行得很好,但在RoR 4上就不行:
<iframe src="http://myrailsapp.com/" width="100%" height="50" id="rails_iframe">error!</iframe>
我尝试在我的控制器中使用verify_authenticity_token
和protect_from_forgery
选项...看起来是别的原因(但我不确定)。
upd。示例:http://jsfiddle.net/zP329/
发布于 2013-05-18 12:41:02
这与Rails4在默认情况下启用额外的安全协议有关:http://weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/
在远程站点中断iFrames的设置是X-Frame-Options。默认设置为SAMEORIGIN,防止内容跨域加载:
config.action_dispatch.default_headers = {
'X-Frame-Options' => 'SAMEORIGIN'
}
您可以在此处阅读有关新的默认标头的信息:http://edgeguides.rubyonrails.org/security.html#default-headers
为了允许iFrame跨域工作,您可以更改默认标头以允许跨域X-Frame。
config.action_dispatch.default_headers = {
'X-Frame-Options' => 'ALLOWALL'
}
发布于 2015-03-11 13:55:00
这对安全性有好处,但当您希望在iframe
中调用您的action
时,您可以这样做:
要允许所有原点,请执行以下操作:
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
使用:after_filter
当您需要在iframe
中使用多个action
时,最好创建一个方法并使用: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
途径:
发布于 2021-06-17 20:39:09
更新:似乎ALLOW-FROM和ALLOWALL目前都是无效的"X-Frame-Options“标头值。唯一有效的两个是DENY和SAMEORIGIN,它们都不允许从另一个源访问。请参阅MDN文档:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options。
因此,看起来response.headers.delete "X-Frame-Options"
是现在唯一能够在另一个网站上显示iframe内容的方法。但如果有人知道我所不知道的,我很乐意证明这一点。
https://stackoverflow.com/questions/16561066
复制相似问题