Rails 4:如何在特定页面中添加来自其他站点的外部javascript文件

Rails 4: How to add external javascript file from other site in a specific page

本文关键字:其他 添加 站点 文件 javascript 外部 Rails      更新时间:2023-09-26

我正在使用涡轮链接(rails4),以下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>

我的应用程序.js如下所示:

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

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

在布局中添加内容块:

布局.html.erb

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

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

简介.html.erb

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

尽管涡轮链接很酷,但我发现自己比以前更头疼。 在某些特殊情况下,我还注入特定于页面的 css 或 js,它存在于标头中。 它可能很笨拙,但我把它放在布局中,条件是使用 current_page?助手

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

我目前正在考虑的解决方案是动态注入脚本:

(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));