javascript - 将 Assets 管道处理的 javascript 文件的内容插入 HTML

标签 javascript ruby-on-rails lazy-loading

使用此代码:

<%= javascript_include_tag 'execute_asap' %>

我可以包含一个链接到 execute_asap.js 的脚本.

但是,为了尽快真正执行该脚本,脚本的内容应该出现在 HTML 文档本身中,这样客户端就不必发出额外的 HTTP 请求来获取 javascript。

有什么方法可以实现这一点,同时仍然获得 Assets 管道和 list 文件的好处?

我的用例是我使用 javascript 延迟加载图像,并且我想尽快开始图像加载。

最佳答案

我做了类似的事情,但是使用了 css 文件。我最终在 helper/application_helper.rb 中为其创建了一个自己的方法。因此,我寻找已编译的资源并将其缩小并返回 html_safe

def inline_css
  return Rails.application.assets.find_asset('application').to_s unless Rails.env.production?

  File.read([Rails.root,
             'public',
             'assets',
             Rails.application.assets_manifest.files.select { |k, v| k if v['logical_path'] == 'application.css' }
                                                    .sort_by{|k,v| v['mtime']}.last.first].join('/').to_s)
                                                    .gsub(/\r\n|\r|\n|/, '')
end
<style><%= inline_css.html_safe %></style>

这不是最漂亮的解决方案,但对我有用。

关于javascript - 将 Assets 管道处理的 javascript 文件的内容插入 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467320/

相关文章:

angular - 延迟加载获取当前路由模块

JavaScript 悬停菜单在应该消失的时候没有消失

javascript - Ember 创建多态记录

ruby-on-rails - 给定一个 Model.title,如何最好地查询首字母 = X 的所有记录

ruby-on-rails - 为什么 Ruby "include?"嵌套在 if/end 条件中时表现不同?

javascript - 未捕获的引用错误 : function is not defined

javascript - 禁用输入按钮中的回车键

php - 创建专业代码是否需要使用依赖注入(inject)模式?

javascript - Three.js 跨多个面的渐变

php - jQuery 使用延迟加载插件从外部文件加载图像