我如何通过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'
}
发布于 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内容的方法。但如果有人知道我所不知道的,我很乐意证明这一点。
发布于 2019-10-01 20:20:05
我正在使用Rails 6和Chromium 76。以前的X-Frame-Options解决方案不起作用。但我注意到,当我们将在线iframe与JS连接时,它工作得很好。所以,在我看来,我只是做了一个简单的解决方案:
<div id='iframe_wrapper' 'data-iframe-content'='<iframe src="https://host.com/"></iframe>'>
</div>
...and添加如下JS代码:
$(document).ready(function() {
var wrapper = $('#iframe_wrapper')[0]
wrapper.innerHTML = wrapper.attributes['data-iframe-content'].value
})
https://stackoverflow.com/questions/16561066
复制相似问题