如何创建不包含 blink 的下载 link?
How do I create a download link that doesn't blink?
我希望用户能够通过我在控制器中设置的方法下载文件。此外,我不希望 URL 在用户下载文件时在我的浏览器中发生变化。我有这个 link 设置
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), target: '_blank' %>
问题是,有一个屏幕 blink,因为生成了一个新选项卡来生成下载。这在视觉上看起来没有吸引力。我在其他网站上看到过,您单击 link 后,某些内容会在没有 blink 的情况下开始下载。我该怎么做?
编辑: 这里是 link
调用的函数
def download_cc
scenario = Scenario.find(params[:scenario_id])
send_data scenario.cc_data, filename: "#{scenario.title}.imscc", type: 'application/zip', :disposition => 'attachment'
end
删除目标
目前,您正在设置 target="_blank",这告诉浏览器当您单击 URL 时,您想要打开一个新选项卡。删除它应该只是开始下载而不打开选项卡或 window.
< 由于我误读了您的问题,下面可选的额外信息:>
正在格式化 links
的外观
您是否使用 HTML 或 CSS 来设计网站?如果是这样,您可以在 css 类.[= 中应用 css 状态属性,例如 "active" "hover" "visited" "link" 14=]
假设您有 link:
<a href="example.com">My Link</a>
如果您创建了 css 文件并自定义了 link 的属性:
a:visited {
text-decoration: none;
}
这将允许您更改已访问 link 的外观。然后您可以使用任何 css 属性 以任何您想要的方式自定义外观。
正在将 CSS 个文件添加到 Ruby 应用
使用 Ruby,您可以使用:<%= stylesheet_link_tag "filename" %> 加载 css 文件。
来源:
http://www.w3schools.com/css/css_link.asp
How do I use CSS with a ruby on rails application?
只要您使用 send_file,您就不会看到 屏幕 blink.
控制器中的 scenario_download_cc_path(subscription.scenario)
操作应如下所示:
file_path = File.join(Rails.root, "/public/myfile.whatever")
send_file file_path
无论您的 link 是否包含 target: '_blank'
,Chrome 和 IE 上的行为都是一样的
只需将 "download" 属性添加到您的 link:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), download: true %>
我做了一些本地测试,我的假设是 Turbolinks 把事情搞砸了。我建议您从 link 中删除 target: '_blank'
并添加 data: { turbolinks: false }
以针对此特定 link 选择退出 Turbolinks。更改后的代码应如下所示:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), data: { turbolinks: false } %>
您的控制器操作看起来不错,无需更改。
我希望用户能够通过我在控制器中设置的方法下载文件。此外,我不希望 URL 在用户下载文件时在我的浏览器中发生变化。我有这个 link 设置
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), target: '_blank' %>
问题是,有一个屏幕 blink,因为生成了一个新选项卡来生成下载。这在视觉上看起来没有吸引力。我在其他网站上看到过,您单击 link 后,某些内容会在没有 blink 的情况下开始下载。我该怎么做?
编辑: 这里是 link
调用的函数def download_cc
scenario = Scenario.find(params[:scenario_id])
send_data scenario.cc_data, filename: "#{scenario.title}.imscc", type: 'application/zip', :disposition => 'attachment'
end
删除目标
目前,您正在设置 target="_blank",这告诉浏览器当您单击 URL 时,您想要打开一个新选项卡。删除它应该只是开始下载而不打开选项卡或 window.
< 由于我误读了您的问题,下面可选的额外信息:>
正在格式化 links
的外观您是否使用 HTML 或 CSS 来设计网站?如果是这样,您可以在 css 类.[= 中应用 css 状态属性,例如 "active" "hover" "visited" "link" 14=]
假设您有 link:
<a href="example.com">My Link</a>
如果您创建了 css 文件并自定义了 link 的属性:
a:visited {
text-decoration: none;
}
这将允许您更改已访问 link 的外观。然后您可以使用任何 css 属性 以任何您想要的方式自定义外观。
正在将 CSS 个文件添加到 Ruby 应用
使用 Ruby,您可以使用:<%= stylesheet_link_tag "filename" %> 加载 css 文件。
来源: http://www.w3schools.com/css/css_link.asp How do I use CSS with a ruby on rails application?
只要您使用 send_file,您就不会看到 屏幕 blink.
控制器中的 scenario_download_cc_path(subscription.scenario)
操作应如下所示:
file_path = File.join(Rails.root, "/public/myfile.whatever")
send_file file_path
无论您的 link 是否包含 target: '_blank'
只需将 "download" 属性添加到您的 link:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), download: true %>
我做了一些本地测试,我的假设是 Turbolinks 把事情搞砸了。我建议您从 link 中删除 target: '_blank'
并添加 data: { turbolinks: false }
以针对此特定 link 选择退出 Turbolinks。更改后的代码应如下所示:
<%= link_to image_tag("cc_icon.png"), scenario_download_cc_path(subscription.scenario), data: { turbolinks: false } %>
您的控制器操作看起来不错,无需更改。