我是一个铁杆菜鸟,所以我知道我可能完全错过了这里的东西。我试图通过我的产品控制器将网址传递给iframe。
这是我的设置。
产品控制器
def open_url
@url = params[:url]
end
index.html.erb
<%= link_to "More Info", open_path(url: "http://www.ceratoboutique.com" + product.destination_url) %>
open_url.html.erb
<iframe src= "<%= @url %>" style="border: 0; position:fixed; top:0; left:0; right:0; bottom:0; width:100%; height:100%" />
的routes.rb
get '/open' => 'products#open_url', via: 'get'
我已经检查了这两个问题
Rails 4 - Passing Params via link_to?
Opening a Link in a New Window within an iFrame
但我仍然输了,网址被传递到浏览器但它似乎没有传递给我控制器中的@url变量。
调试转储
!红宝石/哈希:ActionController的::参数
url:http://www.ceratoboutique.com/collections/tops/products/combo-blouse
控制器:产品
动作:open_url
答案 0 :(得分:0)
我决定坚持使用rails约定并使其成为一个宁静的链接。我仍然不知道为什么原始实现不起作用,但它使用控制器中的show方法。
控制器
def show
@url = Product.find(params[:id])
end
index.html.erb
<%= link_to "More Info", product_path(product) %>
show.html.erb
<iframe src= "<%= "http://www.ceratoboutique.com" + @product.destination_url %>" style="border: 0; position:fixed; top:0; left:0; right:0; bottom:0; width:100%; height:100%" />
****编辑添加了更多关于包含I-Frame ****
的信息我遇到了很多问题,试图让我的iframe在chrome和Heroku上工作,所以如果有人需要它,我会把这个过程结合起来。我首先使用在我的网站上运行的完整SSL部署到Heroku,然后意识到iframe在没有运行SSL的网站的chrome中不起作用。我将强制SSL重新部署为false,但heroku仍然强制我的应用程序使用SSL。我意识到config.force_ssl = true启用了最大年龄为一年的严格传输安全头(HSTS),所以我不得不使用以下内容使HSTS到期。
在应用程序控制器中使SSL过期
class ApplicationController < ActionController::Base
before_filter :expire_hsts
def expire_hsts
response.headers["Strict-Transport-Security"] = 'max-age=0'
end
在Production.rb
config.force_ssl = false
然后为确保在Chrome浏览器中显示x框架,我添加了以下内容。
启用chrome中的x-frame
config.action_dispatch.default_headers = { 'X-Frame-Options' => 'ALLOWALL' }
您可能希望在某些页面上运行SSL,这可以通过下面链接的SSL enforcer gem轻松完成。
ssl-enforcer gem
https://github.com/tobmatth/rack-ssl-enforcer
祝你在iFrame的丑陋中导航!