9

我正在使用 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

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

4

3 回答 3

12

在布局中添加内容块:

布局.html.erb

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

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

profile.html.erb

<% content_for(:header) do %>
  <script src="http://otherdomain.com/xyz.js"></script>
<% end %>
于 2013-09-20T17:38:12.237 回答
5

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

 = javascript_include_tag "whatever.com/external.js" if ( current_page?(:controller => "users" ) && current_page?(:action => "index" ) )
于 2013-09-17T22:51:13.690 回答
3

我目前正在查看的解决方案是动态注入脚本

(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));
于 2013-11-04T19:24:43.727 回答