【问题标题】:Rails, conditional including Javascript if not loaded?Rails,如果未加载,则有条件包括Javascript?
【发布时间】:2013-11-06 22:43:02
【问题描述】:

我试图在我的 Rails 布局中包含一个 Javascript 文件,前提是它没有从 CDN 加载,例如在纯 Javascript 中我会执行以下操作;

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
<script>
    window.Modernizr || document.write('<script src="assets/js/modernizr.2.6.2.min.js"><\/script>');
</script>

我将如何使用 Rails 资产管道进行这项工作?

我试过了,

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
<script>
    window.Modernizr || document.write('<%= javascript_include_tag "modernizr-2.6.2" %>');
</script>

但这写成,

<script>
        window.Modernizr || document.write('<script src="/assets/modernizr-2.6.2.js?body=1"></script>

然后以某种方式进入我的正文 HTML 并离开,"');" 在我的正文标记中。所以标签没有正确关闭。

有人知道如何让它工作吗?

【问题讨论】:

  • 是的,这个例子不起作用,因为当你在文档中编写 javascript-include-tag 时,Rails 已经完成了模板的解析。如果您使用您的原始脚本(第一个示例)会发生什么情况,它是否可以满足您的需求?
  • 更多的是它是一个资产的硬编码路径,这看起来很危险。
  • 嗯,是的,重新查看您的输出示例 - 它看起来确实在做一些奇怪的事情。你想要的是标签......但编码所以反斜杠不是真正的斜杠?你看过原始的html,还是用firebug(或equiv)看它? (您的浏览器可能在这里“帮助”解释......并不是说它会以任何一种方式工作......但最好确定我们清楚什么是从rails的javascript标签中弹出的。是有没有办法将字符串存储在以前的某个地方并在此时将其转义?...只是推测。
  • 也 - 也许您可以使用 javascript_path 并制作自己的脚本标签,而不是使用 javascript_include_tag:apidock.com/rails/v3.0.9/ActionView/Helpers/AssetTagHelper/…

标签: javascript ruby-on-rails ruby-on-rails-4 asset-pipeline


【解决方案1】:

要获得所需的输出,请使用 escape_javascript 帮助器。

使用您的示例:

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
<script>
    window.Modernizr || document.write('<%= j(javascript_include_tag("modernizr-2.6.2")) %>');
</script>

j()escape_javascript() 的别名,看起来更整洁。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多