ruby link_to helper未在_blob.html.erb中显示“target”属性

3zwjbxry  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(89)

我想把一个链接中的target="_blank”属性放到一个Active Storage Blobs局部视图(app/views/active_storage/blobs/_blob.html.erb)中,但最终的html中没有显示该属性。

app/views/active_storage/blobs/_blob.html.erb

<%= link_to blob.filename, rails_blob_path(blob), target: "_blank" %>

字符串
在最后的HTML中,没有显示target="_blank”:

<a href="/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBDZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--48145f82f0b597246f7579fe56b06f563320fe15/file.pdf">file.pdf</a>


事实上,为了测试,我把HTML标签而不是link_to助手,也不起作用。然而,在另一种观点中,它起作用了。
我用ID属性测试过,也不起作用。

**Ruby版本:**ruby 3.2.2(2023-03-30 revision e51014 f9 c 0)[x64-mingw-ucrt]
**Rails版本:**Rails 7.0.6。
**操作系统:**Windows 11。

谢谢你的帮助,非常感谢

cu6pst1q

cu6pst1q1#

如果渲染的是Action Text,那么HTML将被清理。render_action_text_content帮助器方法使用Rails::Html::Sanitizer.safe_list_sanitizer,默认情况下将去掉target属性。
测试发生了什么的一种方法是进入Rails控制台并执行以下操作:

content = ActionText::Content.new('<a target="_blank" href="my_url">my text</a>')
helper.render_action_text_content(content)
 => "<a href=\"my_url\">my text</a>"

字符串
要允许target属性,您可以将其添加到初始化器,然后重新启动应用:

ActionText::ContentHelper.allowed_attributes << 'target'


这将允许target通过:

content = ActionText::Content.new('<a target="_blank" href="my_url">my text</a>')
helper.render_action_text_content(content)
 => "<a target=\"_blank\" href=\"my_url\">my text</a>"


请注意,默认情况下去除target属性的原因是为了防止制表符。请参阅this post,了解有关相关攻击的更多信息,以及如果您决定允许target属性,如何在rel属性中使用noreferrer来防止安全问题。

相关问题