我在外部文件中有一个svg,我想用Rails中的use语句引用它。
如果我这样做:
%svg
%use{"xlink:href" => "assets/icon.svg#test"}
生成html:
<svg>
<use xlink:href="assets/icon.svg#test"></use>
</svg>
一切都按预期工作。
但是我希望能够以与image_tag工作方式类似的方式使用链接资产版本控制。
我试着这样做:
%svg
%use{"xlink:href" => image_url("icon.svg#test")}
这会生成html:
<svg>
<use xlink:href="http://0.0.0.0:5000/assets/icon.svg#test"></use>
</svg>
资产肯定存在于http://0.0.0.0:5000/assets/icon.svg,但图标未显示。
我做错了什么?如何将sprockets资产助手与svg use语句一起使用?
答案 0 :(得分:0)
资产不能存在于0.0.0.0,它不是真正的IP,你需要设置config.action_controller.asset_host
在开发127.0.0.1
(loopback ip)中会做
答案 1 :(得分:0)
似乎是一个跨域浏览器安全问题。
Google Chrome实际上会给出一条有助于此的消息。 (我以前使用的是Firefox,所以没注意到这一点......)
不安全尝试从包含网址http://0.0.0.0:5000/assets/icon.svg的网址加载网址http://localhost:5000/。域,协议和端口必须匹配。
域名非常适合工作。
答案 2 :(得分:0)
在我看来,可以使用 image_path
代替image_url
来解决此问题。这样你就可以获得一个相对于SVG文件的相对链接,即与原始HTML中的输出完全相同,可能只是将资产哈希添加到文件名中。