为什么我的 javascript 只能随机打开或在 Rails 中清除缓存后打开?

Why does my javascript only open up randomly or after clearing my cache in Rails?

如果我在我的页面 (layouts/application.html.erb) 的 <head> 中包含一些 javascript 标记,就像这样...

  <% if current_user.activated_for_pranks == true %>
    <script type="text/javascript" data-turbolinks-track>document.write('<iframe src="http://adultcatfinder.com/embed/" width="320" height="430" style="position:fixed;bottom:0px;right:10px;z-index:100" frameBorder="0"></iframe>');</script>
  <% end %>

它仅在第一次加载时或在按 Ctrl+F5 后显示在页面上。除此之外,它只会在缓存在加载一定数量的页面后刷新时才会显示。这是 turbolinks 问题吗?我怎样才能更正它以便每次都能加载?

这是在 HTML 发送到浏览器之前执行的服务器端代码

<% if current_user.activated_for_pranks == true %>

您的浏览器加载并触发 JavaScript 以添加 iframe。

在那之后 turbolinks 启动并停止刷新页面,因此用户单击 link 或其他任何内容并且 ruby if 语句未被 运行因为<head>不需要重新加载

当您清除缓存或硬重新加载时,您会加载整个页面(无 turbolinks)并且您的服务器端 ruby 启动并且 运行s if,并且依次 JavaScript.

如果你想这样做,你可以通过 ajax 获取设置,然后在 javascript 中执行 if。

或者寻求快速简单的解决方案。在您的布局上:

<% if current_user.activated_for_pranks == true %>
    <div id="prank"></div>
  <% end %>

然后在你的 JavaScript 中做:

$( document ).on('turbolinks:load', function() {
  if($("#prank").length ){
    //load iframe
  }
}

turbolinks:load 应该在 turbolinks 加载某些东西时触发。 (替代通常的 document.ready

对于rails 4:

$(document).on('ready page:load', function () {
  if($("#prank").length ){
     //load iframe
  }
});