【问题标题】:Rails 4: How to add external javascript file from other site in a specific pageRails 4:如何在特定页面中添加来自其他站点的外部 javascript 文件
【发布时间】:2013-09-22 12:06:00
【问题描述】:

我正在使用 turbolink (rails4) 并在我的页面标题部分中由 application.js 文件生成以下 js 链接

<script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/global.js?body=1"></script>

我的 application.js 看起来像:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
//= require bootstrap.min.js
//= require respond.min.js

我想从 OTHER 站点添加一个外部 javascript 文件,例如http://otherdomain.com/xyz.js 在我网站的特定页面中。假设我只想在特定页面http://mysite.com/profile 中添加这个外部 js 文件并且我只想在页面的标题部分添加这个 js 文件。那么我该怎么做呢?请不要建议在本地保存该外部文件,因为这不是我的选择。

【问题讨论】:

  • 是否绝对需要在标题中?
  • @Matt 是的,它绝对需要在标题中

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


【解决方案1】:

在布局中添加内容块:

layout.html.erb

...
<head>
  <%= yield(:header) %>
</head>
...

在需要 JS 文件的一个模板中,将其渲染到该块中:

profile.html.erb

<% content_for(:header) do %>
  <script src="http://otherdomain.com/xyz.js"></script>
<% end %>

【讨论】:

  • 这个&lt;% if content_for?(:header) %&gt; 部件真的需要吗?在这种情况下,如果没有内容,则产生 :header 将产生无输出,就像这段代码一样有效地留下一个空行。似乎只是使用&lt;%= yield(:header) %&gt; 是要走的路。
  • 我的答案是 2 年前的,所以我不记得为什么要添加条件。不过我同意,没必要。我会更新答案。感谢您的提示。
【解决方案2】:

我目前正在寻找的解决方案是injecting the script dynamically

(function(d, script) {
    script = d.createElement('script');
    script.type = 'text/javascript';
    script.async = true;
    script.onload = function(){
        // remote script has loaded
    };
    script.src = 'http://www.google-analytics.com/ga.js';
    d.getElementsByTagName('head')[0].appendChild(script);
}(document));

【讨论】:

    【解决方案3】:

    尽管 turbolink 很酷,但我发现自己比以前更头痛。在某些特殊情况下,我还会在页眉中注入特定于页面的 css 或 js。这可能是 hacky,但我使用 current_page 的条件将它放在布局中?帮手

     = javascript_include_tag "whatever.com/external.js" if ( current_page?(:controller => "users" ) && current_page?(:action => "index" ) )
    

    【讨论】:

    • trh,我已经考虑过了,但这是最后一个 hacky 选项,一旦没有更好的选项,我会这样做。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多